3

コンテンツを含む .csv ファイルがあります (例)

Attributes,Description,Dial-Up
4,2,0.2
3,1,0.4

dictreader の使用:

dictreader = csv.DictReader(open(filename, "rb"), delimiter=',')
dictdata = {}
count=0
for row in dictreader:
    dictdata[count]=row
    count=count+1

テーブルに表示するか、ライターを使用すると、次のようになります。

Dial-Up,Attributes,Description
0.2,4,2
0.4,3,1

では、どうすればフィールド名をソートできますか?

4

1 に答える 1

10

DictReader、フィールド (dict キー) を というプロパティに格納しますfieldnames

fields = dictreader.fieldnames
print(fields)
# ['Attributes', 'Description', 'Dial-Up']

したがって、行の値をこの順序で出力するには:

print(','.join(fields))
for row in dictreader:
    print(','.join(row[field] for field in fields))

収量

Attributes,Description,Dial-Up
4,2,0.2
3,1,0.4

または、@JonClements のアイデアを使用して:

import operator
fields = dictreader.fieldnames
getfields = operator.itemgetter(*fields)
for row in dictreader:
    print(','.join(getfields(row)))

使用する動機はoperator.itemgetter、リスト内包表記を使用するよりも高速であることです。

In [70]: %timeit getfields(row)
10000000 loops, best of 3: 174 ns per loop

In [71]: %timeit [row[field] for field in fields]
1000000 loops, best of 3: 272 ns per loop
于 2013-01-14T12:28:25.710 に答える