问题取决于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
请注意,出于相同的原因,也不会创建该列表。