如何在python中直接将文件添加到zip?

Eud*_*die 4 python zip

我是python的新手。在这里,我的目标是将数据放入zip文件中。以下是我编写的代码,其中我将数据写入unzipped_file,然后在zipped_file.zip中写入unzipped_file,然后删除未压缩的文件。

import os
import zipfile

##Some code above.............
for some_data in big_data:
    with open('unzipped_file', 'a+') as unzipped_f:
        unzipped_f.write(some_data)

##Some code in between...........

with zipfile.ZipFile('zipped_file.zip', 'w') as zipped_f:
    zipped_f.write("unzipped_file")

os.remove("unzipped_file")
Run Code Online (Sandbox Code Playgroud)

而不是创建一个中间的unzipped_file。我可以一步一步将数据直接写到zipped_file中吗?

For*_*Bru 6

zipfile.writestr(file_name, bytes)将表示的原始数据写入bytes存档。 file_name是存档将包含的文件的名称。

with zipfile.ZipFile('zipped_file.zip', 'w') as zipped_f:
    zipped_f.writestr("file_name", some_data)
Run Code Online (Sandbox Code Playgroud)

编辑:将多个数据写入存档中某个文件的唯一操作是一次写入所有数据:

with zipfile.ZipFile('zipped_file.zip', 'w') as zipped_f:
    zipped_f.writestr("file_name", ''.join(x for x in big_data))
Run Code Online (Sandbox Code Playgroud)

仅当big_data包含字符串时,以上方法才有效。否则,您可以尝试pickle.dumps(big_data)pickle.dumps(list(big_data))

请注意,然后big_data(除非是生成器)的副本将在内存中构造,然后写入文件。如果ZipFile不解压缩文件然后再次压缩,则无法更新现有归档文件中的文件。


Fej*_*ejs 6

根据docs,您可以使用:

with zipfile.ZipFile('someZipFile.zip', 'a') as myzip:
    myzip.write('someFileToBeAdded.txt')
Run Code Online (Sandbox Code Playgroud)

添加someFileToBeAdded.txt到现有someZipFile.zip文件。如果someZipFile.zip不存在,它将被创建。