2013-03-12 44 views
4

我試圖解析一個CSV使用python,並希望能夠索引一行中的項目,使他們可以訪問使用row[0],row[1]等。Python CSV閱讀器返回列作爲列表

到目前爲止,這是我的代碼:

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',我不知道如何設置它。我做這個輸入到一個互動的外殼和運行

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功能應答狀態在我上面的代碼,但即使修復它給了我一個名單列表本身是在相同的格式字典這樣的:

['1'] 
['2'] 
['1'] 
['3'] 
['8'] 
['3'] 
['5'] 
. 
. 
. 

事實證明,我也必須刪除.read() from data = urllib.urlopen(url).read()

+1

不相關的問題,但你應該非常小心做把()S的內部迭代循環。請考慮批量提貨。在大多數情況下性能都有巨大提升。也可以問問自己,如果你想承諾一個帶有索引的放置,並最終依賴你的循環內的查詢。你可以將標準化爲鍵控記錄嗎?這將對性能產生巨大的影響,用get來代替查詢,並且在put上沒有索引。 – stevep 2013-03-13 03:09:23

+0

謝謝你的建議。如果像你說的那樣,put()將有助於性能,那麼我會這麼做。至於使用鍵控記錄,我並不十分了解這一點,並且會進行調查。再次感謝你。 – Davidrd91 2013-03-13 22:46:20

回答

7

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] 
+0

哇,我覺得啞巴。我一直在查看我的代碼和CSV/Python文檔,並且從未注意到我正在使用DictReader()。謝謝 – Davidrd91 2013-03-12 23:59:29