urlopen出错:在未加引号的字段中看到的换行符

时间:2013-01-19 10:19:23

标签: python csv newline urllib urlopen

我正在使用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将正确处理所有格式的换行符。因此,问题很可能来自其他地方。我不知道。我的所有文本编辑和我的编辑表编辑都可以正常打开文件。

有人知道如何诊断问题吗?

*编辑*

该文件的创建者通过电子邮件通知我,我不是唯一遇到此类问题的人。因此,他决定再做一次。上面的代码现在再次正常工作。不幸的是,使用新文件也意味着无法再重现该问题,并且正确测试了解决方案。

在结束这个问题之前,我要感谢所有花时间找出解决方案并在此发布的堆垛机。

3 个答案:

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