您需要替换open
为urllib.urlopen或urllib2.urlopen。
例如
import csv
import urllib2
url = 'http://winterolympicsmedals.com/medals.csv'
response = urllib2.urlopen(url)
cr = csv.reader(response)
for row in cr:
print row
Year,City,Sport,Discipline,NOC,Event,Event gender,Medal
1924,Chamonix,Skating,figure skating,AUT,individual,M,Silver
1924,Chamonix,Skating,figure skating,AUT,individual,W,Gold
...
最初的问题被标记为“ python-2.x”,但是对于python3实现(仅需要少量更改),请参见下文。
该问题已加标签,python-2.x
因此篡改原始问题或已接受的答案似乎不合适。但是,现在不支持Python 2
,并且此问题对于“ python csv urllib”仍然具有良好的google功能,因此这里是更新的Python 3解决方案。
现在必须将urlopen
的响应(以字节为单位)解码为有效的本地编码,因此必须对接受的答案进行一些修改:
import csv, urllib.request
url = 'http://winterolympicsmedals.com/medals.csv'
response = urllib.request.urlopen(url)
lines = [l.decode('utf-8') for l in response.readlines()]
cr = csv.reader(lines)
for row in cr:
print(row)
请注意,以开头的额外行lines =
是事实,该事实urlopen
现在在urllib.request
模块中,print当然需要括号。
它几乎不做广告,但是csv.reader
可以从字符串列表中读取。
而且由于其他人提到了熊猫,所以这里有一种方法可以在控制台友好的输出中显示CSV:
python3 -c 'import pandas
df = pandas.read_csv("http://winterolympicsmedals.com/medals.csv")
print(df.to_string())'
(是的,这是三行,但是您可以将其复制粘贴为一个命令。