2016-11-22 11 views
3

私はパンダでread_csvを使用して、FTPサーバから圧縮ファイルを読み込もうとしています。 zipファイルには、必要なファイルが1つだけ含まれています。私は両方のパンダ18.1と19.0で、このエラーを取得するzip圧縮でpandas read_csvを使用する

AttributeError: addinfourl instance has no attribute 'seek' 

:私はこのエラーを取得する

pd.read_csv('ftp://ftp.fec.gov/FEC/2016/cn16.zip', compression='zip') 

は、ここに私のコードです。私は何かを逃しているのですか、これはバグでしょうか?

+0

このzipファイルに存在するどのように多くのファイル? – amin

+0

必要なファイルが1つだけです – itzy

+1

'zip'はファイルポインタを移動するために' seek() 'が必要ですが、インターネットストリーム(' http'、 'ftp'など)は実ファイルではなく、' seek () ' – furas

答えて

3

エラーが発生する理由を完全にはわかりませんが、urllib2を使用してURLを開き、hereのようにメモリ内のバイナリストリームにデータを書き込むことで回避できます。さらに、適切なセパレータを指定する必要があります。それ以外の場合は、別のエラーが発生します。

import io 
import urllib2 as urllib 
import pandas as pd 

r = urllib.urlopen('ftp://ftp.fec.gov/FEC/2016/cn16.zip') 
df = pd.read_csv(io.BytesIO(r.read()), compression='zip', sep='|', header=None) 

は限りエラー自体として、私はパンダはそのエラーになると思われる、(それが実際にzipファイルではありません)URLのコンテンツをダウンロードする前に、「zipファイル」に求めて使用しようとしていると思います。

0
header = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/54.0.1',} 
remotezip = requests.get(url, headers=header) 
root = zipfile.ZipFile(io.BytesIO(remotezip.content)) 
for name in root.namelist(): 
      df = pd.read_csv(root.open(name)) 

自分のブログの記事から撮影: Read zipped csv files in python pandas without downloading zipfile

関連する問題