Pythonを使用してgzファイルを解凍する方法


83

FTPサイトからローカルのWindowsファイルサーバーにダウンロードしたgzファイルを抽出する必要があります。ファイルのローカルパスに変数を設定しましたが、GZIPマドルで使用できることはわかっています。

これどうやってするの?GZファイル内のファイルはXMLファイルです。


5
何を試したのかわかりますか?
heinst 2015年

1
なぜこれはそれほど反対票を投じられるのですか?上記の単一の賛成票で2つの回答があることを考えると、質問はそれほど悪くはありません。
Paulo Neves 2017

@PauloNevesは、おそらくその質問がその作者からの調査をまったく示していないためです。
bfontaine

回答:


140
import gzip
import shutil
with gzip.open('file.txt.gz', 'rb') as f_in:
    with open('file.txt', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

2
なぜあなたは秒を入れたのですか?それは一般的な習慣ですか?あなたは、同じコンテキストマネージャで複数のファイルを開くことができます
RomainL。

1
おそらく、f_inを読み取ってf_outを書き込んだためです。ドキュメントによると、読み取りobjと書き込みobjのパラメータdocs.python.org/3/library/shutil.html#shutil.copyfileobjが必要です。
paxton91michael

@Mattまた、f_inとf_outを閉じてはいけませんか?
JeyJ

7
@JeyJ:これが「with」ステートメントの目的です。「with」セクションの存在時にf_in.close()を実行します。何かがうまくいかない場合(例外など)に本当に役立ちます。これは、リソースが閉じていることを確認します
sweetdream

1
shutil.copyfileobj()3番目のパラメータがあることに注意してくださいlength「整数の長さは、指定されている場合、バッファサイズです。特に、負の長さの値は、ソースデータをチャンクでループせずにデータをコピーすることを意味します。デフォルトでは、データはチャンクで読み取られます。制御されていないメモリ消費を避けてください。」
norok 26


9

たぶんあなたはそれをパンダにも渡したいでしょう。

with gzip.open('features_train.csv.gz') as f:

    features_train = pd.read_csv(f)

features_train.head()

2
これはパンダと何の関係がありますか?「GZファイル内のファイルはXMLファイルであるOP - 」
CZ

4

xmlデータを使用していて、現在pd.read_xml()(v0.23.4以降)関数がないため、正確な答えではありませんが、パンダ(v0.21.0以降)ではファイルを解凍できます。ありがとうウェス!

import pandas as pd
import os
fn = '../data/file_to_load.json.gz'
print(os.path.isfile(fn))
df = pd.read_json(fn, lines=True, compression='gzip')
df.tail()

3
このコードは質問に答えることができますが、問題を解決する方法や理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
nic3500 2018

1
素晴らしい答え。圧縮されたjsonを非常に単純な(pythonic)方法で読み取るだけです。
lordcenzin

3

解凍後にファイルを解析する場合は、ファイルをバイナリとして開くときに必要なdecode()メソッドを使用することを忘れないでください。

import gzip
with gzip.open(file.gz, 'rb') as f:
    for line in f:
        print(line.decode().strip())

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.