6

row[0]Python を使用して CSV を解析しようとしていますが、行内のアイテムにインデックスを付けて、などを使用してアクセスできるようにしたいと考えています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'てきて、設定方法がわかりません。これをインタラクティブシェルに入力し、実行時に

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 がこのように印刷されるのはなぜですかints。[130534543, 47.00009, 23001.9000] のように行を 3 つのリストに分割する必要があります。

編集:

Answer が述べているように、上記のコードで間違った csv 関数を使用していましたが、それを修正するとリストが得られましたが、リスト自体は次のような dict と同じ形式でした。

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

.read()fromも削除する必要がありましたdata = urllib.urlopen(url).read()

4

1 に答える 1

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]
于 2013-03-12T23:50:15.497 に答える