将csv解析为di

2024-09-22 16:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将csv金融数据从web解析成dict,我可以通过键进行导航。
我使用失败了csv.DictReader.
我有:

import csv
import urllib2
req = urllib2.Request('http://financials.morningstar.com/ajax/ReportProcess4CSV.html?&t=XNAS:BRCM&region=usa&culture=en-US&cur=USD&reportType=is&period=12&dataType=A&order=desc&columnYear=5&rounding=3&view=raw&r=886300&denominatorView=raw&number=3')
response = urllib2.urlopen(req)
response.next() 
csvio = (csv.DictReader(response))
print csvio.fieldnames 
print len(csvio.fieldnames)

编辑以反映以下答案的更改。

这几乎让我明白了,但我需要在把主要的“财政年度…共享数据”提供给DictReader之前去掉它。怎样才能做到最好?我已经看到了转换成字符串和剥离铅字符str.l裂缝()就像医生说的here不走运。在


Tags: csv数据importwebrawresponserequesturllib2
1条回答
网友
1楼 · 发布于 2024-09-22 16:33:21

要使用DictReader,您需要指定字段名,或者字段名必须是csv数据的第一行(即标题行)。在

在代码检索的csv文件中,字段名位于第二行数据中,而不是第一行中。我所做的是在将csv文件传递给DictReader构造函数之前抛出第一行数据。在

针对您更新的问题: 从标题行中剥离前导文本可能是不可取的,因为这是作为第一列数据的字段名。最好放弃前2行数据,然后直接将所需字段名提供给DictReader。我更新了下面的例子以反映这一点。在

import csv
import urllib2

req = urllib2.Request('http://financials.morningstar.com/ajax/ReportProcess4CSV.html?&t=XNAS:BRCM&region=usa&culture=en-US&cur=USD&reportType=is&period=12&dataType=A&order=desc&columnYear=5&rounding=3&view=raw&r=886300&denominatorView=raw&number=3')
response = urllib2.urlopen(req)

response.readline() # This reads (and discards) the first row of data which is not needed.
response.readline() # skip the 

myFieldnames = ["firstColName", "TTM", "2012", "2011", "2010", "2009", "2008"]
csvio = csv.DictReader(response, fieldnames=myFieldnames)

print csvio.fieldnames 
for row in csvio:
    print row

相关问题 更多 >