我正在尝试下载.csv文件并将其保存到我的计算机上。但是,当我运行下面的脚本时,我收到错误"错误:行包含NULL字节"。我做错了什么?
import csv
import urllib2
url = 'http://wildfire.alberta.ca/reports/activedd.csv'
response = urllib2.urlopen(url)
cr = csv.reader(response)
for row in cr:
print row
答案 0 :(得分:3)
您尝试下载的文件采用UTF-16格式,而CSV模块并非专为此设计。您需要将其从UTF-16解码为其他格式。例如:
import csv
import codecs
import urllib2
url = 'http://wildfire.alberta.ca/reports/activedd.csv'
response = urllib2.urlopen(url)
cr = csv.reader([x.strip() for x in codecs.iterdecode(response, 'UTF-16')])
data = [x for x in cr]
# Manipulate the data here
# Now to save the CSV:
with open('outputfile.csv', 'wb') as output:
writer = csv.writer(output)
writer.writerows(data)
如果您只是需要下载文件而不是操作它,那么有更好的方法(请参阅minitoto'答案)。
这是一个示例,必须手动剥离换行才能使其正常工作,因此我确定可能有更好的方法,但这是主要问题
答案 1 :(得分:1)
我想最简单的方法是使用urlretrieve
:
import urllib
url = 'http://wildfire.alberta.ca/reports/activedd.csv'
urllib.urlretrieve(url, "activedd.csv")
答案 2 :(得分:-1)
这就是我所做的。懒惰的方式。
import urllib2
url = 'http://wildfire.alberta.ca/reports/activedd.csv'
response = urllib2.urlopen(url)
with open('activeddData.csv','w') as csvFile:
for line in response.readlines():
csvFile.write(line)