簡體   English   中英

如何在 Python 中的 zip 文件中提取 tar.gz 文件的成員

[英]how to extract members of tar.gz file within a zip file in Python

zip 文件包含 tar.gz 文件。 如何在不先提取到磁盤的情況下檢索 tar.gz 文件的成員?

abc.zip
  |- def.txt
  |- ghi.zip 
  |- jkl.tar.gz


def scan_zip_file(zfile):
    l_files = []
    with zipfile.ZipFile(zfile, 'r') as zf:
        for zname in zf.namelist(): 
            if zname.endswith('.zip'):
                with zipfile.ZipFile(io.BytesIO(zf.read(zname))) as zf2:
                   l_files.extend(zf2.namelist())
            elif zname.endswith('.tar.gz'):
                pass
            else:
                l_files.append(zname)

您可以使用tarfile模塊,方式與使用 zipfile 模塊非常相似。 要完成您的代碼並獲取 tar.gz 文件中的文件名:

def scan_zip_file(zfile):
    l_files = []
    with zipfile.ZipFile(zfile, 'r') as zf:
        for zname in zf.namelist(): 
            if zname.endswith('.zip'):
                with zipfile.ZipFile(io.BytesIO(zf.read(zname))) as zf2:
                   l_files.extend(zf2.namelist())
            elif zname.endswith('.tar.gz'):
                with tarfile.open(fileobj=io.BytesIO(zf.read(zname))) as tf:
                   l_files.extend(tf.getnames())
            else:
                l_files.append(zname)

tarfile.openfileobj參數告訴它使用 io.BytesIO 返回的“類文件對象”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM