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
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
をスローします。
圧縮するファイル(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)
ディレクトリも指定したいので、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')
後でzipfile.close()を呼び出してみますか?
from zipfile import ZipFile
zipf = ZipFile("main.Zip","w", zipfile.Zip_DEFLATED)
zipf.write("main.json")
zipf.close()