2017-06-27 16 views
1

好吧,我一直堅持這個小時,應該只花幾分鐘的時間。如何解壓縮從Python3中的SFTP拉取的GZIP文件,就像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完美解壓。

但是,如果我嘗試使用gzip的庫解壓縮這個文件,我不能得到一個UTF8編碼的字符串進行解析:

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

我得到什麼似乎是UTF8字節串,但是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(...).write替換爲open(...).write直接寫入壓縮文件。

+0

哇。愚蠢的我。謝謝! – Dominooch