2016-11-30 124 views
0

我是新来的蟒蛇。在这里我的目标是将数据放入zip文件中。以下是我写的代码,其中我将数据写入unzipped_file,然后在zipped_file.zip中写入unzipped_file,然后除去解压缩的文件。如何在python中直接添加文件到zip文件?

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") 

而不是创建一个中间unzipped_file。我可以直接在一个步骤中将数据写入zipped_file。

回答

1

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) 

编辑:你可以做多段数据写入到存档的一些文件中的唯一一件事就是马上写这一切:

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

上述方法,将工作只有big_data包含字符串。否则,您可以尝试pickle.dumps(big_data)pickle.dumps(list(big_data))

请注意,然后复制big_data(除非它是一个生成器)将在内存中构建,然后写入文件。在现有的ZipFile存档中更新文件而不提取它然后再压缩是不可能的。

+0

对不起,错误的沟通,但在这里我试图追加数据到一个unzipped_file,然后将其保存在zipped_file。我已编辑参考代码 – Eudie

+0

@Eudie,请参阅我的编辑 – ForceBru

0

docs,您可以使用:

with zipfile.ZipFile('someZipFile.zip', 'a') as myzip: 
    myzip.write('someFileToBeAdded.txt') 

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

+0

建议在文件中使用'with statement'。 – ettanany

+0

感谢您的建议,尽管主要关注的是将文件添加到zip文件,而不是“正确”的方式来打开文件。 – Fejs

+0

对不起,错误的沟通,但在这里我试图追加数据到一个unzipped_file,然后将其保存在zipped_file。我编辑了代码以供参考 – Eudie