2016-11-30 158 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

相關問題