压缩单个文件

时间:2017-02-13 22:03:18

标签: python zipfile

我正在尝试在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

4 个答案:

答案 0 :(得分:3)

zip文件的正确方法是:

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

python官方文档says

  

<强> ZipFile.write(filename, arcname=None, compress_type=None)

     

将名为filename的文件写入存档,并为其提供存档名称arcname

您将open(filename).read()传递给write()open(filename).read()是包含文件filename的全部内容的单个字符串,它会抛出FileNotFoundError,因为它正在尝试查找以字符串内容命名的文件。

答案 1 :(得分:3)

由于您还想使用os.chdir指定目录,请尝试使用

#!/usr/bin/python

from zipfile import ZipFile
import os

os.chdir('/path/of/target/and/destination')
ZipFile('archive.zip', 'w').write('original_file.txt')

答案 2 :(得分:3)

如果要压缩的文件(filename)在另一个名为pathname的目录中,则应使用arcname参数。否则,它将重新创建整个文件夹层次结构到文件夹。

from zipfile import ZipFile
import os

with ZipFile(zip_file, 'w') as zipf:
    zipf.write(os.path.join(pathname,filename), arcname=filename)

答案 3 :(得分:0)

之后尝试调用zipfile.close()吗?

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

   zipf.close()