我正在尝试在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
答案 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()