次の形式の csv ファイルがあります。
x1 x2 x3
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
このファイルの最初の列だけにアクセスする方法を教えてください。
名前で列にアクセスするには(あなたdelimiter
が実際にそうであるかどうかはわかり' '
ませんが、それをに変更できます','
):
import csv
with open('data.csv', 'rb') as f:
r = csv.DictReader(f, delimiter=' ', skipinitialspace=True)
print [row['x1'] for row in r]
['1', '2', '3', '4', '5']
csv
モジュールを使用せずに読むことができます:
with open('data.csv') as fobj:
next(fobj)
x1 = [line.split(None, 1)[0] for line in fobj]
print x1
結果:
['1', '2', '3', '4', '5']
はwith
、デデントするとすぐにファイルが閉じられることを保証してファイルを開きます。私たちの場合、print x1
. Python では、開かれたファイル (ここfobj
では ) はイテレータです。next
リスト内包表記を使用して、最初の行を消費し、各行の最初のエントリを抽出します。.split(None, 1)
スペース、タブ、改行などのあらゆる種類の空白で分割し、分割を最初の列に制限します。これは大きなファイルの場合はパフォーマンスが向上する可能性がありますが、ここでは問題になりません。プレーン.split()
も機能します。リストの[0]
最初の要素をフェッチします。
数値を int に変換するバリエーション:
with open('data.csv') as fobj:
next(fobj)
x1 = [int(line.split(None, 1)[0]) for line in fobj]
print x1
結果:
[1, 2, 3, 4, 5]
結論: このcsv
モジュールは優れていますが、Python は非常に強力であるため、多くの場合、Python がなくても実行できます。ファイルの内容が多少不規則で、csv
チョークが詰まる場合は、常に「手動で」行う方法を知っておくとよいでしょう。