【问题标题】:Read ZipFile from URL into StringIO and parse with panda.read_csv将 ZipFile 从 URL 读取到 StringIO 并使用 panda.read_csv 解析
【发布时间】:2015-11-05 04:55:46
【问题描述】:

我正在尝试从 URL 读取 ZipFile 数据并通过 StringIO 使用 pandas.read_csvZipFile 中的数据解析为 csv

r = req.get("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").content
file = ZipFile(StringIO(r))
salaries_csv = file.open("Salaries.csv")
salaries = pd.read_csv(salaries_csv)

最后一行给了我一个错误:

CParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.

但是如果我尝试使用

salaries = pd.read_csv(file.open("Salaries.csv"))

它有效。

所以我想知道我在这里错过了什么。

file.open 应该返回一个ZipExtFile 对象,并且由于 read_csv 只接受字符串或文件句柄/StringIO 输入,那么为什么最后一行有效?

【问题讨论】:

    标签: python pandas zipfile stringio


    【解决方案1】:

    我认为你读取数据的方式有问题,它适用于我使用 urllib2。

    from zipfile import ZipFile
    from StringIO import StringIO
    import urllib2
    
    r = urllib2.urlopen("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").read()
    file = ZipFile(StringIO(r))
    salaries_csv = file.open("Salaries.csv")
    salaries = pd.read_csv(salaries_csv)
           yearID teamID lgID   playerID    salary
    0        1985    BAL   AL  murraed02   1472819
    1        1985    BAL   AL   lynnfr01   1090000
    2        1985    BAL   AL  ripkeca01    800000
    3        1985    BAL   AL   lacyle01    725000
    4        1985    BAL   AL  flanami01    641667
    5        1985    BAL   AL  boddimi01    625000
    6        1985    BAL   AL  stewasa01    581250
    7        1985    BAL   AL  martide01    560000
    

    【讨论】:

    • 谢谢@firelynx。完美的解决方案。
    【解决方案2】:

    Python 3.5 对@firelynx 的回答几乎没有变化

    from zipfile import ZipFile
    from io import BytesIO
    import urllib.request as urllib2
    
    r = urllib2.urlopen("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").read()
    file = ZipFile(BytesIO(r))
    salaries_csv = file.open("Salaries.csv")
    salaries = pd.read_csv(salaries_csv)
    print (salaries)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2016-03-20
      • 2019-08-09
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多