Pythonでファイルをgzipしたいです。 subprocss.check_call()を使用しようとしていますが、エラー「OSError:[Errno 2] No such file or directory」で失敗し続けます。私がここでしようとしていることに問題はありますか? subprocess.check_callを使用するよりもファイルをgzipするより良い方法はありますか?
from subprocess import check_call
def gZipFile(fullFilePath)
check_call('gzip ' + fullFilePath)
ありがとう!!
これを試して:
check_call(['gzip', fullFilePath])
これらのファイルのデータをどのように使用しているかによっては、Skirmantasの http://docs.python.org/library/gzip.html へのリンクも役立つ場合があります。ページの下部にある例に注意してください。データにアクセスする必要がない場合、またはPythonコードに既にデータがない場合は、gzipを実行するのが最もクリーンな方法であるため、必要ありませんPythonでデータを処理します。
モジュールがあります gzip 。使用法:
圧縮されたGZIPファイルを作成する方法の例:
import gzip
content = b"Lots of content here"
f = gzip.open('/home/joe/file.txt.gz', 'wb')
f.write(content)
f.close()
既存のファイルをGZIP圧縮する方法の例:
import gzip
f_in = open('/home/joe/file.txt')
f_out = gzip.open('/home/joe/file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
編集:
Jace Browningの答え Python> = 2.7でwith
を使用すると、明らかに簡潔で読みやすいので、2番目のスニペットは次のようになります。
import gzip
with open('/home/joe/file.txt', 'rb') as f_in, gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
f_out.writelines(f_in)
Python 2.7形式:
import gzip
with open("path/to/file", 'rb') as orig_file:
with gzip.open("path/to/file.gz", 'wb') as zipped_file:
zipped_file.writelines(orig_file)
さらに短く(テスト済みpython 2.7.6)
with open('path/to/file') as src, gzip.open('path/to/file.gz', 'wb') as dst:
dst.writelines(src)
gzip モジュールを使用します。
import gzip
import os
in_file = "somefile.data"
in_data = open(in_file, "rb").read()
out_gz = "foo.gz"
gzf = gzip.open(out_gz, "wb")
gzf.write(in_data)
gzf.close()
# If you want to delete the original file after the gzip is done:
os.unlink(in_file)
エラー:OSError: [Errno 2] No such file or directory'
は、ファイルfullFilePath
が存在しないことを示しています。それでもそのルートに行く必要がある場合は、ファイルがシステム上に存在し、相対ではなく絶対パスを使用していることを確認してください。
これに関するドキュメントは実際には非常に簡単です
圧縮ファイルの読み取り方法の例:
import gzip
f = gzip.open('file.txt.gz', 'rb')
file_content = f.read()
f.close()
圧縮されたGZIPファイルを作成する方法の例:
import gzip
content = "Lots of content here"
f = gzip.open('file.txt.gz', 'wb')
f.write(content)
f.close()
既存のファイルをGZIP圧縮する方法の例:
import gzip
f_in = open('file.txt', 'rb')
f_out = gzip.open('file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
https://docs.python.org/2/library/gzip.html
これがドキュメント全体です。 。 。
import gzip
import shutil
with open('file.txt', 'rb') as f_in:
with gzip.open('file.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
# or because I hate nested with statements
import gzip
import shutil
from contextlib import ExitStack
with ExitStack() as stack:
f_in = stack.enter_context(open('file.txt', 'rb'))
f_out = stack.enter_context(gzip.open('file.txt.gz', 'wb'))
shutil.copyfileobj(f_in, f_out)
import gzip
content = b"Lots of content here"
with gzip.open("file.txt.gz", "wb") as f:
f.write(content)
コンテンツがバイトに変換されることに注意してください
上記の例のように文字列/バイトリテラルとしてコンテンツを作成しない場合の別の方法は次のとおりです。
import gzip
# get content as a string from somewhere else in the code
with gzip.open("file.txt.gz", "wb") as f:
f.write(content.encode("utf-8"))
他のエンコード方式の説明については、 this SO question を参照してください。
import gzip
def gzip_file(src_path, dst_path):
with open(src_path, 'rb') as src, gzip.open(dst_path, 'wb') as dst:
for chunk in iter(lambda: src.read(4096), b""):
dst.write(chunk)