#はじめに
- 大量のcsvファイルの見出し数行を全て削除したい
- 使ってるのはJupyter Notebook
#事前準備:
- 本ファイルはをカレントディレクトリにおく
- カレントディレクトリにあるMachine11_trdフォルダにヘッダー処理したいcsvファイルを入れておく。
import csv, os
#処理したいフォルダのパスを作成 (1)参照先
csv_folder_path = os.path.join(".","InputFolder")
#アウトプット先のフォルダのパスを作成 (2)保存先
headerRemoved_path = os.path.join(csv_folder_path,"headerRemoved")
#ヘッダー削除したファイルを入れる新規フォルダを作成する。
os.makedirs(headerRemoved_path, exist_ok=True)
#カレントディレクトリ以下にある指定フォルダの全ファイルをループする
#指定フォルダ内のファイル名リストを取り出す
for csv_filename in os.listdir(csv_folder_path):
if not csv_filename.endswith(".csv"):
continue #csvファイルでなければスキップする
#print("見出し削除中"+ csv_filename + "...")
#CSVファイルから一行ずつ読み込む(最初の行をスキップする)
csv_rows=[]
csv_file_obj = open(os.path.join(csv_folder_path, csv_filename))
reader_obj = csv.reader(csv_file_obj)
for row in reader_obj:
#一行目または二行目のときは追加しない, そのほかは追加する (3)ヘッダー条件
if reader_obj.line_num == 1 or reader_obj.line_num == 2:
continue #対象行をスキップする
csv_rows.append(row)
csv_file_obj.close()
#CSVファイルを指定フォルダ内に書き出す
csv_file_obj = open(os.path.join(headerRemoved_path, csv_filename),"w",newline="")
csv_writer = csv.writer(csv_file_obj)
for row in csv_rows:
csv_writer.writerow(row)
csv_file_obj.close()
やってること
- 一行目と二行目をスキップしてすべての行をcsv_rows[]に保存する(必要に応じて変える)
- カレントディレクトリ内に新しく作るheaderRemoveフォルダに新しくCSVファイルを作成し書き出す
- これらを対象フォルダにある全てのCSVで行う。
考察
- はじめdataframでやろうとしたが、カラム数が違うものはうまく読み込むことができなかったので、一行ずつリストを読み込み、リストからdataframe型に変換した。