使用python下载.csv文件

时间:2016-03-01 16:51:10

标签: python python-2.7

我正在尝试下载.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

3 个答案:

答案 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)