1. ホーム
  2. python

[解決済み】Pythonでcsvファイルを編集するときにヘッダをスキップする。

2022-02-23 16:18:54

質問事項

Pythonを使ってcsvを編集するために、以下のコードを参照しています。コードの中で呼び出される関数は、コードの上部を形成しています。

問題:下記のコードで2行目からcsvの編集を始めたいのですが、ヘッダーを含む1行目は除外して欲しいのです。現在、1行目のみに関数を適用しており、私のヘッダー行は変更されています。

in_file = open("tmob_notcleaned.csv", "rb")
reader = csv.reader(in_file)
out_file = open("tmob_cleaned.csv", "wb")
writer = csv.writer(out_file)
row = 1
for row in reader:
    row[13] = handle_color(row[10])[1].replace(" - ","").strip()
    row[10] = handle_color(row[10])[0].replace("-","").replace("(","").replace(")","").strip()
    row[14] = handle_gb(row[10])[1].replace("-","").replace(" ","").replace("GB","").strip()
    row[10] = handle_gb(row[10])[0].strip()
    row[9] = handle_oem(row[10])[1].replace("Blackberry","RIM").replace("TMobile","T-Mobile").strip()
    row[15] = handle_addon(row[10])[1].strip()
    row[10] = handle_addon(row[10])[0].replace(" by","").replace("FREE","").strip()
    writer.writerow(row)
in_file.close()    
out_file.close()

を初期化することで解決しようとしました。 row 変数を 1 が、うまくいきませんでした。

この問題を解決するために私を助けてください。

解決方法は?

あなたの reader 変数は反復可能で、それをループすることで行を取得します。

ループの1つ前の項目をスキップさせるには、単に next(reader, None) で、戻り値は無視する。

また、コードを少し簡略化することもできます。開いているファイルをコンテキスト・マネージャとして使用し、自動的に閉じるようにすることができます。

with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile:
   reader = csv.reader(infile)
   next(reader, None)  # skip the headers
   writer = csv.writer(outfile)
   for row in reader:
       # process each row
       writer.writerow(row)

# no need to close, the files are closed automatically when you get to this point.

ヘッダを未処理のまま出力ファイルに書きたい場合は、これも簡単です。 next() から writer.writerow() :

headers = next(reader, None)  # returns the headers or `None` if the input is empty
if headers:
    writer.writerow(headers)