Python读取URL中CSV数据报错:iterator should return strings, not bytes如何解决?
问题:Python读取远程CSV文件时抛出「iterator should return strings, not bytes」异常
我有一段Python代码,想从远程URL读取CSV数据:
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)))
运行这段代码时,出现了如下异常:
Error
Traceback (most recent call last) in ()
1 url = "https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv"
----> 2 stats = list(csv.reader(urllib.request.urlopen(url)))Error: iterator should return strings, not bytes (did you open the file in text mode?)
请问该如何解决这个问题?
解决方案
嘿,这个问题我之前也碰到过!核心原因很简单:urllib.request.urlopen()返回的是字节流对象,而csv.reader()认的是文本模式的可迭代对象(得返回字符串而不是字节)。给你两种靠谱的解决办法:
方法一:用io.TextIOWrapper包装字节流
直接把字节流转换成文本模式的文件对象就行,记得指定编码(一般用UTF-8就没问题):
import csv import urllib.request import io url = "https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv" response = urllib.request.urlopen(url) # 把字节流包装成文本模式对象,指定编码 text_stream = io.TextIOWrapper(response, encoding='utf-8') stats = list(csv.reader(text_stream))
方法二:手动解码字节内容
先把所有字节读出来,解码成字符串,再用io.StringIO包装成csv能处理的文本流:
import csv import urllib.request import io url = "https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv" response = urllib.request.urlopen(url) # 读取字节并解码为字符串 csv_content = response.read().decode('utf-8') # 用StringIO把字符串转成文本流 stats = list(csv.reader(io.StringIO(csv_content)))
额外小技巧:用requests库简化操作(可选)
如果你的项目允许安装第三方库,requests能让这个过程更省心,它直接返回文本内容,不用自己折腾解码:
import csv import requests from io import StringIO url = "https://gist.githubusercontent.com/aparrish/cb1672e98057ea2ab7a1/raw/13166792e0e8436221ef85d2a655f1965c400f75/lebron_james.csv" response = requests.get(url) stats = list(csv.reader(StringIO(response.text)))
内容的提问来源于stack exchange,提问作者Szuyu Chen
相关产品推荐
相关产品推荐

