1

我正在使用带有 Python 2.7 的 urllib.urlopen 来读取位于外部网络服务器上的 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 将正确处理所有格式的换行符。因此,问题很可能来自其他地方。不过我不知道。该文件可以使用我的所有文本编辑器和电子表格编辑器正常打开。

有谁知道如何诊断问题?

* 编辑 *

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

在结束问题之前,我要感谢所有花费一些时间来找出解决方案并将其发布在此处的堆垛机。

4

3 回答 3

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
于 2013-01-19T11:08:17.183 回答
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 文件感谢JF Sebastian

尽管如此,您可能想考虑与我们共享特定的 .csv 文件?所以我们可以尝试重新创建错误。

于 2013-01-19T14:19:05.983 回答
0

我在下载的 csv 时遇到了同样的问题。

我知道解决方法是将 open 与“rU”一起使用。但我宁愿不必将文件保存到磁盘,只是为了打开一个变量。这似乎是不必要的。

file = open(filepath,'rU')
mydata = csv.reader(file)

因此,如果有人有更好的解决方案,那就太好了。让我走到这一步的 Stackoverflow 链接:

在未引用的字段错误中看到 CSV 换行符

使用 CSV Django 模块以通用换行模式打开文件,



我找到了我真正想要的 stringIO、cStringIO 或 io:

使用 Python,我如何像使用文件一样读取/写入内存中的数据?

我最终让 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
于 2016-01-06T18:42:01.657 回答