2017-02-13 59 views
2

我想在Python中壓縮單個文件。無論出於何種原因,我都很難理解語法。我想要做的就是保留原始文件並創建一個新的原始壓縮文件(如Mac或Windows將在存檔文件時執行的操作)。郵編單個文件

這是我到目前爲止有:

import zipfile 

myfilepath = '/tmp/%s' % self.file_name 
myzippath = myfilepath.replace('.xml', '.zip') 

zipfile.ZipFile(myzippath, 'w').write(open(myfilepath).read()) # does not zip the file properly 
+3

你得到了什麼錯誤? –

+1

['zipfile.write()'](https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.write)將現有文件的名稱作爲第一個參數,您正在傳遞該文件的內容作爲文件名。你要麼傳遞源文件的名字(和'arcname ='一起)或者你正在尋找['writestr()'](https://docs.python.org/2/library/zipfile.html# zipfile.ZipFile.writestr)。 – dhke

+1

'ZipFile.write(filename,arcname = None,compress_type = None)' 將名爲filename的文件寫入存檔,給它一個存檔名稱arcname – haifzhan

回答

3

到zip文件,正確的方法是:

zipfile.ZipFile('hello.zip', mode='w').write("hello.csv") 
# assume your xxx.py under the same dir with hello.csv 

蟒蛇官方文檔says

ZipFile.write(filename, arcname=None, compress_type=None)

編寫一個名爲文件名的歸檔文件,給它的檔案名稱爲arcname

您將open(filename).read()轉換爲write()open(filename).read()是一個包含文件filename的全部內容的單個字符串,它會拋出FileNotFoundError,因爲它試圖查找以字符串內容命名的文件。

0

()之後嘗試調用zipfile.close?

from zipfile import ZipFile 
    zipf = ZipFile("main.zip","w", zipfile.ZIP_DEFLATED) 
    zipf.write("main.json") 

    zipf.close()