はじめに
テスト目的で数個のCSVファイルのデータをもとに200ほど作ることをお願いされ
流石に手動は気が滅入るので、Pythonで解決するする方法を調べやってみたので
方法をまとめました。
実装
- モジュールのインストール
今回はcsvモジュールと一括でファイルを読み込むためにglobモジュールを使います。
※globモジュールをインストールしていない場合はpip install
などでインストールしてください。
from glob import glob
import csv
- CSV読み込み
ファイルの読み込みはglob('*.csv')
で実行するスクリプトと同じフォルダの
CSVファイルを読み込んでくれます。
files = glob('*.csv') #Load CSV files
- ファイルの読み込み〜データの編集
まず、読み込んだファイルを読み取りモードで開きます。
その後にCSVファイルの各行をlinesに格納していくといった流れにしています。
配列linesに対してfor文を使えば1行ずつデータを編集することができます。
実際には、for文の中に条件分岐を入れたり、メソッドを入れて返り値を使って
データを更新してました。
for file_name in files:
with open(file_name, 'r',newline='') as readFile:
reader = csv.reader(readFile)
lines = list(reader)
for line in lines:
line[0] = 'A列に入れたいデータを入力'
line[1] = 'B列に入れたいデータを入力'
line[2] = 'C列に入れたいデータを入力'
- データの書き込み〜CSVファイルの生成
ファイルを書き込みモードで開きます。
※ファイル名を同じにすると、新しいファイルは作成されず既存のCSVファイルが更新されます。
writerowsに先ほど更新したlinesを引数にして実行すると
更新したデータを書き込んでくれます。
最後にファイルを閉じます。
with open('edited_'+file_name, 'w',newline='') as writeFile:
writer = csv.writer(writeFile)
writer.writerows(lines)
readFile.close()
writeFile.close()
余談ですが、ファイルを開く際におまじないとしてよく書かれるnewline=''
を
指定せずに実行すると、適切に改行されず、1行ずつ間が空いてしまいます。。。
最後に
Pythonほぼ未経験なのですが、今回のスクリプト作成を通して
面倒な処理については、スクリプトをどんどん作った方が後にも残るし
勉強になると思いました。