Python 压缩单个文件

Python 压缩单个文件,python,zipfile,Python,Zipfile,我正在尝试用python压缩单个文件。不管出于什么原因,我都很难理解语法。我试图做的是保留原始文件并创建原始文件的新压缩文件(就像Mac或Windows在存档文件时所做的那样) 以下是我到目前为止的情况: import zipfile myfilepath = '/tmp/%s' % self.file_name myzippath = myfilepath.replace('.xml', '.zip') zipfile.ZipFile(myzippath, 'w').write(open(

我正在尝试用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
之后尝试调用zipfile.close()

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

   zipf.close()

压缩文件的正确方法是:

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

ZipFile.write(文件名,arcname=None,compress\u type=None)

将名为filename的文件写入归档文件,并将其命名为arcname


open(filename).read()
传递到
write()
open(filename).read()
是一个字符串,它包含文件的全部内容
filename
,它将抛出
FileNotFoundError
,因为它试图找到一个以字符串内容命名的文件。

因为您还想指定目录,请尝试使用
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')
如果要压缩的文件(
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)

你有什么错误?将现有文件的名称作为第一个参数,则传递文件的内容作为文件名。您可能希望传递源文件的名称(以及
arcname=
),或者正在查找。
ZipFile.write(filename,arcname=None,compress_type=None)
将名为filename的文件写入存档,并将存档名称命名为arcname,以便“正确”压缩文件,您可能需要添加
compress\u type=zipfile.ZIP\u DEFLATED
,因为zipfile默认压缩是
ZIP\u STORED
,它不会减少压缩文件的大小。
compress\u type
的有效值是
zipfile.ZIP\u STORED
(未压缩),
zipfile.ZIP\u DEFLATED
(标准ZIP),和
zipfile.ZIP_BZIP2
zipfile.ZIP_LZMA
,这些都是不言自明的。