我試圖解析一個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()
。
不相關的問題,但你應該非常小心做把()S的內部迭代循環。請考慮批量提貨。在大多數情況下性能都有巨大提升。也可以問問自己,如果你想承諾一個帶有索引的放置,並最終依賴你的循環內的查詢。你可以將標準化爲鍵控記錄嗎?這將對性能產生巨大的影響,用get來代替查詢,並且在put上沒有索引。 – stevep 2013-03-13 03:09:23
謝謝你的建議。如果像你說的那樣,put()將有助於性能,那麼我會這麼做。至於使用鍵控記錄,我並不十分了解這一點,並且會進行調查。再次感謝你。 – Davidrd91 2013-03-13 22:46:20