【问题标题】:Python: Loading zip file stored in CSV from WebPython:从 Web 加载存储在 CSV 中的 zip 文件
【发布时间】:2016-11-28 19:59:57
【问题描述】:

我安装了 pandas 3.5(反对您的一些建议),但似乎无法弄清楚为什么新代码不会从 URL 加载 zip 文件:

import pandas as pd
import numpy as np
from io import StringIO
from zipfile import ZipFile
from urllib.request import urlopen
url = urlopen("http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors_CSV.zip")

#Download Zipfile and create pandas DataFrame
zipfile = ZipFile(StringIO(url.read()))
FFdata = pd.read_csv(zipfile.open('F-F_Research_Data_Factors.CSV'), 
                     header = 0, names = ['Date','MKT-RF','SMB','HML','RF'], 
                     skiprows=3)

我相信它在 urlopen 函数上失败了。但是将 URL 替换为文本字符串时不起作用。

有人知道发生了什么吗?谢谢!

【问题讨论】:

  • 你会得到一个堆栈帧,告诉你错误在哪里。发布!

标签: python csv zip


【解决方案1】:

运行你的程序我得到错误

Traceback (most recent call last):
  File "c.py", line 9, in <module>
    zipfile = ZipFile(StringIO(url.read()))
TypeError: initial_value must be str or None, not bytes

快速测试确认问题在于您将字节字符串传递给StringIO

td@mintyfresh ~/tmp $ python3
Python 3.4.3 (default, Nov 17 2016, 01:08:31) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import io
>>> io.StringIO(b'aaa')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: initial_value must be str or None, not bytes

解决方案很简单......只需使用 io.BytesIO 对象代替。这是一个常见错误,因为 StringIO 本来可以在 python 2 中工作,而且很多示例都是基于 2.x 的。

import pandas as pd
import numpy as np
from io import BytesIO
from zipfile import ZipFile
from urllib.request import urlopen
url = urlopen("http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors_CSV.zip")

#Download Zipfile and create pandas DataFrame
zipfile = ZipFile(BytesIO(url.read()))
FFdata = pd.read_csv(zipfile.open('F-F_Research_Data_Factors.CSV'), 
                     header = 0, names = ['Date','MKT-RF','SMB','HML','RF'], 
                     skiprows=3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2012-11-12
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多