2017-11-14 25 views
0

csvファイルを読むとき、最初の行(または複数)は、データに含めたくないヘッダーです。csv.readerヘッダーを正しく処理する方法

私はちょうど読者を宣言する前にnextを使用し、ヘッダからのデータを必要としない場合(複数の行をヘッダに使用されている場合、私は次の複数回呼び出すことができます):たまに

with open('myfile.csv', 'rb') as f: 
    next(f)       #skip first row 
    reader = csv.reader(f) 
    for row in reader: 
     #process my data 

しかし、私は自分のデータにヘッダーを含めたくないが、依然としてその値が必要です。その場合、csv.readerをリストに変換し、ヘッダーを別々に処理します。

with open('myfile.csv', 'rb') as f: 
    reader = list(csv.reader(f)) 

    my_header = reader.pop(0) #remove header 

    for row in reader: 
     #process my data 

これはうまくいきました。しかし、私はそれがcsv.readerを使用する "ベストプラクティス"の方法であるかどうかは分かりませんし、調べる価値のある他の方法があります。

+0

非常に強力で多才な読者である['pandas.read_csv()'](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)を見てください。 –

+0

これは、反論されたコメントと回答のレシピです。しかし、 'reader'を' list'に変換する必要はありません。 'my_header = next(reader)'は必要に応じてヘッダ行を取得します。 – Abdou

答えて

3

実際にはベストプラクティスではありません。正当な理由でメモリ内のファイル全体を読み込みます。

>>> it = iter(["hello", "world"]) 
>>> next(it) 
'hello' 
>>> next(it) 
'world' 
>>> next(it) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration 

だから、あなたがしなければならないすべてはされています。面白い部分は...ヘッダを得るためにあなたの最初のスニペットに変更するものはほとんどありませんことを

next(iterator)リターン「現在」の要素んです

with open('myfile.csv', 'rb') as f: 
    reader = csv.reader(f) 
    headers = next(reader) 
    for row in reader: 
     #process my data 

FWIW、あなたが最初のスニペットで「最初の行を」スキップの方法は、脆性です - あなたは、実際には、必ずしもではない最初のラインをスキップしていますその後、ヘッダ行で整理CSVファイルを使用する

with open('myfile.csv', 'rb') as f: 
    reader = csv.reader(f) 
    next(reader) # skip first row 
    for row in reader: 
     #process my data 
0

簡単な方法と:最初の(一部csv形式は、行に埋め込ま改行を持っている)、あなたが実際にしたい「ヘッダーなし」バージョンのためにそう値:CSV + DictReader 例:この方法で

with open ('myfile.csv', 'r') as csv_file: 
csv_reader = csv.DictReader (csv_file) 
     for row in csv_reader: 
         print (row.get ('column1')) # print the value of column1 without title 

、あなたのヘッダ行を無視し、正確にあなたが必要とするデータを対象とし、あなたのコードがきれいになることができます。 私に戻りましょう、後で見てください。

+0

しかし、私はヘッダーを無視したくない場合があります。残りのデータとは別に処理するだけです。 –

関連する問題