如何在python中迭代zip存档的zip存档?



有zip存档zip.zip与zip1.zip和zip, zip在里面。在zip1.zip是0.txt,在zip2.zip是0.txt。在所有的。txt是字符串"Hello world"。如何遍历zip.zip来打印:"你好World"你好World">

我有这个,但是它不工作:

from zipfile import ZipFile
with ZipFile(zip.zip, 'r') as zipObj:
listOfFileNames = zipObj.namelist()
for fileName in listOfFileNames:
# Check filename endswith csv
if fileName.endswith('.zip'):
with ZipFile(fileName) as z:
txt = z.read('0.txt')
print (txt)

调试:

with ZipFile(zip.zip, 'r') as zipObj:
File "E:pythonLibzipfile.py", line 1265, in __init__
self._RealGetContents()
File "E:pythonLibzipfile.py", line 1328, in _RealGetContents
endrec = _EndRecData(fp)
File "E:pythonLibzipfile.py", line 264, in _EndRecData
fpin.seek(0, 2)
AttributeError: 'ZipFile' object has no attribute 'seek'

(更新):

预览的调试问题是,在生产项目中,我传递的不是存档zip.zip,而是list_of_files,没有指向选择第一个文件(list_of_files[0]):

with ZipFile(list_of_files[0], 'r') as zipObj:

使用io.BytesIO()将内容提取到内存

from zipfile import ZipFile
import io
with ZipFile('zip.zip', 'r') as zipObj:
for fileName in zipObj.namelist():
if fileName.endswith('.zip'):
content = io.BytesIO(zipObj.read(fileName)) # zip1.zip
with ZipFile(content) as z:
for txt in z.namelist():
if txt.endswith('.txt'):
txt = z.read('0.txt')
print (txt)

最新更新