Pythonでファイル名の一括変更(os, glob)

Pythonでファイル名の一括変更(os, glob)
スポンサーリンク
スポンサーリンク

Pythonのos, globモジュールを使って、フォルダ内のファイル名を一括で変更する方法について説明します。

スポンサーリンク

使用モジュール

モジュール :os (Python公式ドキュメント
インストール:不要
モジュール :glob (Python公式ドキュメント
インストール:不要 

ディレクトリ構成

以下のようなディレクトリ、ファイル構成を例として、ファイル名を変更する方法を解説していきます。Pythonスクリプトファイルは、ファイル名を変更するファイルが格納されているフォルダと同じ階層にある状態とします。


├── remane.py
└── test
   ├── a.csv
   ├── b.csv
   ├── c.csv
   ├── d.csv
   └── e.csv

ファイル名を連番に変更

変更した結果は以下のようになります。


├── remane.py
└── test
   ├── 001.csv
   ├── 002.csv
   ├── 003.csv
   ├── 004.csv
   └── 005.csv

プログラムは以下のようになります。

手順は以下のようになります。
1. globモジュールでフォルダ内のファイル名の一覧を取得
2. osモジュールで1ファイルずつファイル名変更
3. 元のパスに連結

ポイントを解説します。

pathに対象となるファイルが格納されているフォルダを設定します。
対象フォルダpathに /* を連結して、フォルダ内の全てのファイルを対象としてglob.glob()でファイル名の一覧をfilesにリストとして取得します。
filesの内容は以下のようになります。
[‘./test\a.csv’, ‘./test\b.csv’, ‘./test\c.csv’, ‘./test\d.csv’, ‘./test\e.csv’]

リストfilesをforループで処理して、1ファイルずつファイル名を変更します。
enumerate()で連番iを生成していますが、初期設定では0から開始されてしまうため、第二引数に1を指定することで連番を1から開始しています。
また、数字の前をゼロ埋めして001のようにするためにインデックス番号を用いて'{0:03d}'.format(i)とし、os.path.join()path='./test'と結合しています。

ファイル名の前に連番や文字列を追加

以下のようにファイル名の前に、「 連番_ 」を追加します。

└── test
   ├── 001_a.csv
   ├── 002_b.csv
   ├── 003_c.csv
   ├── 004_d.csv
   └── 005_e.csv

連番を追加する場合は、enumerate()を使い連番を生成して、ファイル名と連結します。


次にファイル名の前に共通の文字列を追加して「work_○.csv」のようにファイル名を変更します。


└── test
   ├── work_a.csv
   ├── work_b.csv
   ├── work_c.csv
   ├── work_d.csv
   └── work_e.csv

プログラムは以下のようになります。

ここではパス文字列fから、拡張子付きのファイル名を取得するために、os.path.basename()を使用しています。

ファイル名の後に文字列や連番を追加

ファイル名の後ろに共通の文字列を追加して「a_work.csv」のようにファイル名を変更します。

結果は以下のようになります。


└── test
   ├── a_work.csv
   ├── b_work.csv
   ├── c_work.csv
   ├── d_work.csv
   └── e_work.csv



連番を追加する場合は以下のようになります。

以下が結果です。


└── test
   ├── a_001.csv
   ├── b_002.csv
   ├── c_003.csv
   ├── d_004.csv
   └── e_005.csv



次に日付情報を追加してみます。処理時点の日付を取得するにはdatetimeモジュールのtoday()メソッドを使用します。

結果は以下のようになります。

   ├── a_work_20220101.csv
   ├── b_work_20220101.csv
   ├── c_work_20220101.csv
   ├── d_work_20220101.csv
   └── e_work_20220101.csv

Python の osモジュール、globモジュールを使ってファイル名を一括で変更する方法について解説しました。