为什么我无法通过 python zipfile 解压缩压缩文件?
Why I Cannot unzip a zipped file by python zipfile?
1号:
def run():
with open('module1/2020-06-csv.zip', 'rb') as f:
io = BytesIO(f.read())
zip_file = zipfile.ZipFile(io)
zip_buffer = 'module1/myzip.zip'
my_zip = zipfile.ZipFile(
zip_buffer,
mode='w',
compression=zipfile.ZIP_DEFLATED
)
for file in zip_file.filelist:
if file.filename.endswith('/'):
continue
filename = file.filename.split('/')[-1]
with zip_file.open(file.filename) as f:
my_zip.writestr(zinfo_or_arcname=filename, data=f.read())
用第一种方法,我可以成功解压'myzip.zip'文件。但是,我使用了 BytesIO(no.2) 而不是本地文件,我无法解压 'myzip.zip' 文件,怎么了?
第2
def run():
with open('module1/2020-06-csv.zip', 'rb') as f:
io = BytesIO(f.read())
zip_file = zipfile.ZipFile(io)
# zip_buffer = 'module1/myzip.zip'
zip_buffer = BytesIO()
my_zip = zipfile.ZipFile(
zip_buffer,
mode='w',
compression=zipfile.ZIP_DEFLATED
)
for file in zip_file.filelist:
if file.filename.endswith('/'):
continue
filename = file.filename.split('/')[-1]
with zip_file.open(file.filename) as f:
my_zip.writestr(zinfo_or_arcname=filename, data=f.read())
zip_buffer.seek(0)
with open('module1/myzip.zip', 'wb') as f:
f.write(zip_buffer.read())
zip_file.close()
my_zip.close()
您必须调用 my_zip.close()
才能使用输出的 zip 文件。你没有在第 1 号中展示它,但我认为如果它起作用的话它一定已经存在了。
在2号中,你在调用my_zip.close()
之前将zip_buffer
的内容写到一个文件中,所以这个文件是不可用的。你稍后再调用my_zip.close()
,但由于你已经写出zip_buffer
的内容,所以已经来不及了。
所以要修复它,您只需在将 zip_buffer
的内容写入文件之前将调用移动到 my_zip.close()
。
1号:
def run():
with open('module1/2020-06-csv.zip', 'rb') as f:
io = BytesIO(f.read())
zip_file = zipfile.ZipFile(io)
zip_buffer = 'module1/myzip.zip'
my_zip = zipfile.ZipFile(
zip_buffer,
mode='w',
compression=zipfile.ZIP_DEFLATED
)
for file in zip_file.filelist:
if file.filename.endswith('/'):
continue
filename = file.filename.split('/')[-1]
with zip_file.open(file.filename) as f:
my_zip.writestr(zinfo_or_arcname=filename, data=f.read())
用第一种方法,我可以成功解压'myzip.zip'文件。但是,我使用了 BytesIO(no.2) 而不是本地文件,我无法解压 'myzip.zip' 文件,怎么了?
第2
def run():
with open('module1/2020-06-csv.zip', 'rb') as f:
io = BytesIO(f.read())
zip_file = zipfile.ZipFile(io)
# zip_buffer = 'module1/myzip.zip'
zip_buffer = BytesIO()
my_zip = zipfile.ZipFile(
zip_buffer,
mode='w',
compression=zipfile.ZIP_DEFLATED
)
for file in zip_file.filelist:
if file.filename.endswith('/'):
continue
filename = file.filename.split('/')[-1]
with zip_file.open(file.filename) as f:
my_zip.writestr(zinfo_or_arcname=filename, data=f.read())
zip_buffer.seek(0)
with open('module1/myzip.zip', 'wb') as f:
f.write(zip_buffer.read())
zip_file.close()
my_zip.close()
您必须调用 my_zip.close()
才能使用输出的 zip 文件。你没有在第 1 号中展示它,但我认为如果它起作用的话它一定已经存在了。
在2号中,你在调用my_zip.close()
之前将zip_buffer
的内容写到一个文件中,所以这个文件是不可用的。你稍后再调用my_zip.close()
,但由于你已经写出zip_buffer
的内容,所以已经来不及了。
所以要修复它,您只需在将 zip_buffer
的内容写入文件之前将调用移动到 my_zip.close()
。