您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将URL中的.csv文件读入Python 3.x-_csv.Error:迭代器应返回字符串,而不是字节(您是否以文本模式打开文件?)

将URL中的.csv文件读入Python 3.x-_csv.Error:迭代器应返回字符串,而不是字节(您是否以文本模式打开文件?)

问题取决于urllib返回字节。作为证明,您可以尝试使用浏览器下载csv文件,然后将其作为常规文件打开,问题就消失了。

这里也解决类似的问题。

可以解决使用适当的编码将字节解码为字符串的情况。例如:

import csv
import urllib.request

url = "ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/file_list.csv"
ftpstream = urllib.request.urlopen(url)
csvfile = csv.reader(ftpstream.read().decode('utf-8'))  # with the appropriate encoding 
data = [row for row in csvfile]

最后一行可能是:data = list(csvfile)可能更易于阅读。

顺便说一句,由于csv文件很大,因此它可能会变慢并且占用大量内存。也许最好使用发电机。

使用由Steven Rumbalski提出的编解码器,因此不必读取整个文件进行解码。减少了内存消耗,提高了速度。

import csv
import urllib.request
import codecs

url = "ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/file_list.csv"
ftpstream = urllib.request.urlopen(url)
csvfile = csv.reader(codecs.iterdecode(ftpstream, 'utf-8'))
for line in csvfile:
    print(line)  # do something with line

请注意,出于相同的原因,也不会创建该列表。

python 2022/1/1 18:47:07 有585人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶