使用 Python 从 .tar.gz 文件中仅提取 jpg 文件。

3
问题概述: 我有一个.tar.gz文件,在其中一个文件夹中,并且我需要从中提取所有的图像(.jpg和.png)。但我必须使用.tar.gz扩展名(使用目录路径)来提取它,而不是通过通常的输入文件名的方式来提取它。我需要在GUI(Tkinter)的图像分类项目的某个部分中使用它。 我正在尝试的代码:
import os
import tarfile

def extractfile():
    os.chdir('GUI_Tkinter/PMC_downloads')
    with tarfile.open(os.path.join(os.environ['GUI_Tkinter/PMC_downloads'], f'Backup_{self.batch_id}.tar.gz'), "r:gz") as so:
        so.extractall(path=os.environ['GUI_Tkinter/PMC_downloads'])

代码没有出现任何错误,但是它没有起作用。请建议我如何通过指定.tar.gz文件扩展名来以其他方式执行相同的操作。
2个回答

2
我认为您可以使用这段代码。
import tarfile
import os

t = tarfile.open('example.tar.gz', 'r')
for member in t.getmembers():
    if ".jpg" in member.name:
        t.extract(member, "outdir")

print(os.listdir('outdir'))

希望我能为您提供帮助。谢谢。


在这个解决方案中,您正在指定需要提取的文件的名称,但我需要通过仅指定.tar.gz扩展名来提取它。谢谢 - @lionking-123。 - Sachin Sinkar
如何在这里使用.endswith? - Sachin Sinkar
你好,它不工作吗?在我的端上它运行良好。 - lionking-123
你好,为什么不检查一下我的代码呢?我认为上面的代码和我的一样。而且我认为我回答得比上面更快。所以,我觉得我可以得到这个答案的赞同。 - lionking-123

2

通用/动态的方法来提取位于文件夹中的一个或多个.tar.gz或zip文件,而不需要指定文件名。这可以通过使用文件的扩展名和路径(位置)来执行。您可以通过在此代码中将所需文件的扩展名作为成员名称来从.tar.gz/zip/压缩文件中提取任何类型的文件(.pdf、.nxml、.xml、.gif等)。例如,我需要从那个.tar.gz文件中提取所有图像到一个文件夹中。因此,在下面的代码中,我已经指定了扩展名.jpg和.png,并将所有图像提取到同一个目录下一个名为“Extracted_Images”的文件夹中。如果您想要的话,还可以通过提供路径参数来更改需要提取文件的目录。例如,“C:/Users/dell/project/histo_images”而不是“Extracted_Images”。


import tarfile
import os
import glob

path = glob.glob("*.tar.gz")

for file in path:
    t = tarfile.open(file, 'r')
    for member in t.getmembers():
        if ".jpg" in member.name:
            t.extract(member, "Extracted_Images")
        elif ".png" in member.name:
            t.extract(member, "Extracted_Images")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接