Python CSV读取器将行作为列表返回

Python CSV读取器将行作为列表返回,python,list,google-app-engine,parsing,csv,Python,List,Google App Engine,Parsing,Csv,我正在尝试使用python解析CSV,并希望能够为行中的项目编制索引,以便可以使用行[0]、行[1]等访问这些项目 到目前为止,这是我的代码: def get_bitstats(): url = 'http://bitcoincharts.com/t/trades.csv?symbol=mtgoxUSD' data = urllib.urlopen(url).read() dictReader = csv.DictReader(data) obj = BitDat

我正在尝试使用python解析CSV,并希望能够为行中的项目编制索引,以便可以使用
行[0]
行[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个
整数的列表,例如[130534543,47.00009,23001.9000]

编辑:

正如答案所述,我在上面的代码中使用了错误的csv函数,但即使修复了它,我得到了一个列表,列表本身的格式与dict相同,因此:

['1']
['2']
['1']
['3']
['8']
['3']
['5']
.
.
.
事实证明,我还必须从
data=urllib.urlopen(url)中删除
.read()
,read()
将以列表的形式返回每一行

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]

哇,我觉得自己很笨。我一直在浏览我的代码和CSV/Python文档,从未注意到我在使用DictReader()。谢谢,与您的问题无关,但在迭代循环中执行put()时应格外小心。取而代之的是考虑分配。在大多数情况下,都会获得巨大的性能提升。还要问问自己是否要提交带有索引的put,以及循环中查询的结果依赖性。你能将其非规范化为一个键控记录吗?这将对性能产生巨大影响,将查询替换为get,并且在put上没有索引。谢谢您的建议。如果如您所说,批处理
put()
s将有助于提高性能,那么我将这样做。至于使用键控记录,我真的不太了解,并将研究它。再次感谢你。