如何在 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.open
的 fileobj
参数告诉它使用 'File-like object' 其中 io.BytesIO returns.
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.open
的 fileobj
参数告诉它使用 'File-like object' 其中 io.BytesIO returns.