1. ホーム
  2. python

csvファイルで列名だけを読み込む

2023-07-19 09:04:07

質問

以下の列を持つcsvファイルを持っています。

id、name、age、sex

続いて、上記のカラムの値がたくさん並んでいます。 カラム名だけを読み込んで、リストの中に入れようとしています。

私はDictreaderを使用しており、これは正しい詳細を出します。

with open('details.csv') as csvfile:
    i=["name","age","sex"]
    re=csv.DictReader(csvfile)
    for row in re:
        for x in i:
            print row[x]

しかし、私がやりたいことは、列のリスト、(上記の場合、"i")それらをリストの中にハードコーディングするよりも、入力Csvで自動的にパースされる必要があります。

with open('details.csv') as csvfile:
   
    rows=iter(csv.reader(csvfile)).next()
    header=rows[1:]
    re=csv.DictReader(csvfile)
    for row in re:
        print row
        for x in header:
            
            print row[x]

これはエラーになります

Keyerrror:'name'

という行の中にprint row[x]があります。どこで間違っているのでしょうか?Dictreaderを使用して列名を取得することは可能ですか?

どのように解決するのですか?

ヘッダを読み取るには next() 関数を使用します。この関数は、リーダーのイテレート可能なオブジェクトの次の行をリストとして返します。

import csv
with open("C:/path/to/.filecsv", "rb") as f:
    reader = csv.reader(f)
    i = reader.next()
    rest = list(reader)

これで、カラムの名前をリストとして持つことができるようになりました。

print i
>>>['id', 'name', 'age', 'sex']

また、以下の点に注意してください。 reader.next() はpython 3では動作しないことに注意してください。代わりに、内蔵の next() を使って、読み込んだ直後にcsvの最初の行を取得するようにします。

import csv
with open("C:/path/to/.filecsv", "rb") as f:
    reader = csv.reader(f)
    i = next(reader)

    print(i)
    >>>['id', 'name', 'age', 'sex']