Python CSV解析不返回正确的行

时间:2013-09-27 20:25:10

标签: python csv

我是python的新手,并且遇到了CSV解析器的问题。这是代码:

import urllib2
import csv


u = urllib2.urlopen(r'http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=nab')
data = u.read()

reader = csv.reader(data)

for row in reader:
    print row

Yahoo返回此原始csv:

"Apple Inc.",482.09,482.00
"Google Inc.",877.20,876.94
"Microsoft Corpora",33.34,33.33

我想解析这个并创建一个包含3个字段的简单JSON对象: 股票,买入,卖出

但数据来自csv.reader(),如下所示:

['Apple Inc.']
['', '']
['4']
['8']
['2']
['.']
['5']
['5']
['', '']
['4']
['8']
['2']
['.']
['4']
['8']
[]
[]
['Google Inc.']
['', '']
['8']
['7']
['6']
['.']
['2']
['4']
['', '']
['8']
['7']
['6']
['.']
['1']
['0']
[]
[]
['Microsoft Corpora']
['', '']
['3']
['3']
['.']
['2']
['9']
['', '']
['3']
['3']
['.']
['2']
['8']
[]
[]

似乎打破了每个数字上的行。关于我在这里做错了什么想法?

3 个答案:

答案 0 :(得分:4)

直接将u解析为读者:

import urllib2
import csv

u = urllib2.urlopen(r'http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=nab')

reader = csv.reader(u)

for row in reader:
    print row

问题是csv.reader接受可迭代的行。当你传递一个字符串时,它认为每个字符都是一行。事实上,它不只是给出单字符元素的原因是由于引号。

u已经是一个可迭代的行,所以只需传入即可。

答案 1 :(得分:1)

csv.reader工厂将第一个参数作为列表或其他可迭代行的第一个参数,而不是带有换行符的完整字符串(它将按字符迭代)。使用data = u.readlines()代替data = u.read()

答案 2 :(得分:0)

引用:

  

所谓的CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式。没有“CSV标准”,因此格式在操作上由许多读写它的应用程序定义。缺乏标准意味着不同应用程序生成和使用的数据通常存在细微差别。这些差异会使从多个来源处理CSV文件变得很烦人。尽管如此,虽然分隔符和引用字符各不相同,但整体格式足够相似,可以编写单个模块,可以有效地操作这些数据,隐藏从程序员那里读取和写入数据的细节。

尝试创建自己的csv并查看它是否有效,如果是,那么它们的csv格式会有所不同。