我正在使用urllib。使用Python 2.7读取位于外部web服务器上的csv文件:
# Try & Except statements removed for clarity
import urllib
import csv
url = ...
csv_file = urllib.urlopen(url)
for row in csv.reader(csv_file):
do_something()
所有100多个文件都可以很好地读取,除了最近更新的文件,并且返回:
Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
该文件可在此处访问。根据我的文本编辑器,它的模式是Mac (CR),而不是Windows (CRLF)的其他文件。
我发现基于这个线程,python urlopen将正确处理所有格式的换行符。因此,问题很可能来自其他地方。不过我也不知道。这个文件在我所有的文本编辑器和电子表格编辑器下都能正常打开。
有谁知道如何诊断这个问题吗?
* EDIT *
文件的创建者通过电子邮件告诉我,我不是唯一一个遇到这种问题的人。因此,他决定再做一次。上面的代码现在又可以正常工作了。不幸的是,使用新文件也意味着问题不能再重现,解决方案也不能正确测试。
在结束问题之前,我想感谢所有花时间想出解决方案并把它贴在这里的用户。
这可能是一个损坏的。csv文件?否则,这段代码可以完美运行。
#!/usr/bin/python
import urllib
import csv
url = "http://www.football-data.co.uk/mmz4281/1213/I1.csv"
csv_file = urllib.urlopen(url)
for row in csv.reader(csv_file):
print row
感谢J.F. Sebastian提供的。csv文件。
尽管如此,你可能想要考虑与我们共享特定的。csv文件?所以我们可以尝试重新创建错误
下面的代码运行时没有任何错误:
#!/usr/bin/env python
import csv
import urllib2
r = urllib2.urlopen('http://www.football-data.co.uk/mmz4281/1213/I1.csv')
for row in csv.reader(r):
print row
我在下载csv文件时遇到了同样的问题。
我知道修复将使用open with 'rU'。但是我不希望把文件保存到磁盘上,而只是打开一个变量。这似乎没有必要。
file = open(filepath,'rU')
mydata = csv.reader(file)
所以如果有人有更好的解决方案,那就太好了。让我走到这一步的Stackoverflow链接:
CSV新行字符出现在未加引号的字段错误
使用CSV Django模块以通用换行模式打开文件
我找到了我真正想要的stringIO,或cStringIO,或io:
使用Python,我如何在内存中读/写数据,就像我用文件一样?
我最终得到了工作,
import csv
import urllib2
import io
# warning its a 20MB csv
url = 'http://poweredgec.com/latest_poweredge-11g.csv'
urlRead = urllib2.urlopen(url).read()
ramFile = io.open(urlRead, mode='w')
openRamFile = open(ramFile, 'rU')
csvCurrent = csv.reader(openRamFile)
csvTuple = map(tuple, csvCurrent)
print csvTuple