web-dev-qa-db-ja.com

単一ファイルを圧縮

Pythonで単一のファイルを圧縮しようとしています。なんらかの理由で、構文を理解するのに苦労しています。私がやろうとしていることは、元のファイルを保持して、元のファイルの新しいzipファイルを作成することです(ファイルをアーカイブした場合の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
9
David542

Zipファイルへの正しい方法は次のとおりです。

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

python公式ドキュメント 言う

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

Filenameという名前のファイルをアーカイブに書き込み、アーカイブ名をarcnameにします。

open(filename).read()write()に渡します。 open(filename).read()は、ファイルfilenameのコンテンツ全体を含む単一の文字列です。文字列contentで名前が付けられたファイルを検索しようとしているため、FileNotFoundErrorをスローします。

9
Haifeng Zhang

圧縮するファイル(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)
9
nbeuchat

ディレクトリも指定したいので、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')
3
l'L'l

後でzipfile.close()を呼び出してみますか?

   from zipfile import ZipFile
   zipf = ZipFile("main.Zip","w", zipfile.Zip_DEFLATED)
   zipf.write("main.json")

   zipf.close()
2
ndsilva