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

Extract only jpg files from a .tar.gz file using python

问题总结: 在我的一个文件夹中,我有 .tar.gz 文件,我需要从中提取所有图像(.jpg 和 .png)。但是我必须使用 .tar.gz 扩展名(使用目录路径)来提取它,而不是使用提供输入 file_name 的通常方式来提取它。我在图像分类项目的 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 文件扩展名来提取它。

我想你可以使用这段代码。

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'))

希望对您有所帮助。谢谢

Generic/dynamic 提取文件夹中存在的一个或多个 .tar.gz 或 zip 文件而不指定文件名的方法。这是通过使用文件的扩展名和路径(位置)来执行的。您可以从 .tar.gz/zip/compressed 文件中提取您想要的任何类型的文件(.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")