为什么我无法通过 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()