我正在使用urllib.urlopen和Python 2.7来读取位于外部网络服务器上的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?
该文件可以访问here。根据我的文本编辑器,它的模式是Mac(CR),而不是其他文件的Windows(CRLF)。
我发现基于this thread,python urlopen将正确处理所有格式的换行符。因此,问题很可能来自其他地方。我不知道。我的所有文本编辑和我的编辑表编辑都可以正常打开文件。
有人知道如何诊断问题吗?
*编辑*
该文件的创建者通过电子邮件通知我,我不是唯一遇到此类问题的人。因此,他决定再做一次。上面的代码现在再次正常工作。不幸的是,使用新文件也意味着无法再重现该问题,并且正确测试了解决方案。
在结束这个问题之前,我要感谢所有花时间找出解决方案并在此发布的堆垛机。
答案 0 :(得分:1)
以下代码运行时没有任何错误:
#!/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
答案 1 :(得分:1)
它可能是一个损坏的.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
为.csv文件致J.F. Sebastian。
Altough,你可能想考虑与我们分享特定的.csv文件?所以我们可以尝试重新创建错误。
答案 2 :(得分:0)
我在下载的csv时遇到了同样的问题。
我知道修复方法是使用“rU'”。但我宁愿不必将文件保存到磁盘,只是打开备份到变量。这似乎没必要。
file = open(filepath,'rU')
mydata = csv.reader(file)
所以如果有人有一个更好的解决方案。 Stackoverflow链接让我走得很远:
CSV new-line character seen in unquoted field error
击> <击> Open the file in universal-newline mode using the CSV Django module 击>
我用stringIO或cStringIO或者io找到了我真正想要的东西:
Using Python, how do I to read/write data in memory like I would with a file?
我最终让io工作了,
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