3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者向け】フォルダに入っているCSVファイルを一括で編集する方法

Posted at

はじめに

テスト目的で数個の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ほぼ未経験なのですが、今回のスクリプト作成を通して
面倒な処理については、スクリプトをどんどん作った方が後にも残るし
勉強になると思いました。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?