csv.Error:你是否以文本模式打开文件?

时间:2018-05-09 06:44:02

标签: python csv urllib

python文件包含以下代码

import csv 
import urllib.request
url = "https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv"
stats = list(csv.reader(urllib.request.urlopen(url)))

当我在python中运行上面的代码时,我得到以下异常:

  

错误
  追溯(最近的呼叫最后)    in()         1 url =“https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv”   ----> 2 stats = list(csv.reader(urllib.request.urlopen(url)))

     

错误:迭代器应该返回字符串,而不是字节(你是否以文本模式打开文件?)

如何解决此问题?

4 个答案:

答案 0 :(得分:1)

urllib的文档建议使用requests模块。

你必须注意两件事:

  • 您必须解码从互联网接收的数据(以字节为单位)才能获得文本。使用requests时,使用text负责解码。
  • csvreader需要一个行列表,而不是一个文本块。在这里,我们将其与splitlines分开。

所以,你可以这样做:

import csv 
import requests

url = "https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv"

text = requests.get(url).text
lines = text.splitlines()
stats = csv.reader(lines)

for row in stats:
    print(row)

# ['Rk', 'G', 'Date', 'Age', 'Tm', ...]
# ['1', '1', '2013-10-29', '28-303', 'MIA',... ]

答案 1 :(得分:0)

我真的不知道这些数据是什么,但如果您有兴趣将它们与,分开,可以尝试这样的事情:

stats = list(csv.reader(urllib.request.urlopen(url).read().decode()))
  

1.它从响应数据中读取

     

2.从字节到字符串解码

     

3.CSV读者

     

4.Cast CSV对象列表

如果您希望这些数据有所不同,请告诉我,以便我可以编辑我的答案。祝你好运。

答案 2 :(得分:0)

您应该阅读urllib.request.urlopen的回复。

stats = list(csv.reader(urllib.request.urlopen(url).read().decode("UTF-8")))

答案 3 :(得分:0)

请尝试以下代码。

android:animateLayoutChanges="false"