我是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中吗?
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不解压缩文件然后再次压缩,则无法更新现有归档文件中的文件。
根据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不存在,它将被创建。
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |