2017-06-27 1 views
1

さて、私は数時間だけこの作業に取り掛かってしまいました。数時間しかかかりませんでした。SFTPから引き出されたGZIPファイルをPython3で解凍する方法は、Mac OSのgunzipと同じですか?

私はデータストアからgzip圧縮されたCSVファイルを引っ張る、次のコードを持っている:

from ftplib import FTP_TLS 
import gzip 
import csv 

ftps = FTP_TLS('waws-prod.net') 
ftps.login(user='foo', passwd='bar') 

resp = ftps.retrbinary('RETR data/WFSIV0606201701.700.csv.gz', gzip.open('WFSIV0606201701.700.csv.gz', 'wb').write) 

ファイルがPWDに表示され、私も自分のMac解凍ツールを開くことができ、元のCSVが完全に解凍されます。私はUTF8のバイト文字列のように見えるものを手に入れる

f=gzip.GzipFile('WFSIV0606201701.700.csv.gz', 'rb') 
s = f.read() 

、しかし、UTF8デコーダ:

私はgzipのライブラリを使用して、このファイルを解凍しようとする場合は、私が解析するUTF8エンコードされた文字列を取得することはできません文字列を解析できません。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 

しかし! FileZillaを使用してSFTPサーバーから直接ダウンロードした場合、上記のgzip.GzipFileコードを実行すると完全に読み取ります。何かが私のダウンローダ/読者に間違っているはずですが、何が間違っているのかという手がかりはありません。

答えて

4
resp = ftps.retrbinary('RETR data/WFSIV0606201701.700.csv.gz', gzip.open('WFSIV0606201701.700.csv.gz', 'wb').write) 

この行は、圧縮ファイルをダウンロードして、それをディスクに書き込むとき、再びをそれを圧縮します。

gzip.open(...).writeopen(...).writeに置き換えると、圧縮ファイルを直接書き込むことができます。

+0

ワウ。愚かな私。ありがとう! – Dominooch

関連する問題