我试图使用python解析CSV,并希望能够对一行中的项目进行索引,以便可以使用row[0]
,row[1]
等访问它们。
到目前为止,这是我的代码:
def get_bitstats():
url = 'http://bitcoincharts.com/t/trades.csv?symbol=mtgoxUSD'
data = urllib.urlopen(url).read()
dictReader = csv.DictReader(data)
obj = BitData()
for row in dictReader:
obj.datetime = datetime.datetime.fromtimestamp(int(row['0'])/1000000)
q = db.Query(BitData).filter('datetime', obj.datetime)
if q != None:
raise ValueError(obj.datetime + 'is already in database')
else:
obj.price = row['1']
obj.amount = row['2']
obj.put()
这会返回KeyError: '0'
,我不知道如何设置它。我确实将它输入到交互式shell中并在运行时
for row in dictReader:
print row
我将此作为输出:
{'1': '3'}
{'1': '6'}
{'1': '2'}
{'1': '6'}
{'1': '9'}
{'1': '8'}
{'1': '6'}
{'1': '4'}
{'1': '4'}
{'1': '', None: ['']}
{'1': '4'}
{'1': '2'}
{'1': '.'}
{'1': '0'}
{'1': '5'}
{'1': '7'}
{'1': '1'}
{'1': '6'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '', None: ['']}
{'1': '0'}
{'1': '.'}
{'1': '0'}
{'1': '1'}
{'1': '0'}
{'1': '0'}
{'1': '5'}
{'1': '4'}
{'1': '2'}
{'1': '5'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '0'}
{'1': '1'}
{'1': '3'}
{'1': '6'}
{'1': '2'}
{'1': '6'}
{'1': '9'}
{'1': '8'}
{'1': '6'}
{'1': '4'}
{'1': '4'}
以及成千上万行。 (因为我确定CSV是数千位数字)
为什么我的CSV以这种方式打印,无论如何将行分成3 ints
列表,例如[130534543,47.00009,23001.9000]
编辑:
作为答案声明我在上面的代码中使用了错误的csv函数,但即使修复它给了我一个列表,列表本身的格式与dict相同:
['1']
['2']
['1']
['3']
['8']
['3']
['5']
.
.
.
事实证明,我还必须从.read()
删除data = urllib.urlopen(url).read()
。
答案 0 :(得分:8)
csv.reader
会将每行作为列表返回
reader = csv.reader(data)
for line_list in reader:
pass
# line_list is a list of the data contained in a row so you can access line_list[0]