【Python入門】複数ファイル名を連番付きで一括変換する方法

デジカメで撮った写真ファイルなど複数のファイル名を一括変換したいことがありますよね?

今回は、Pythonで複数ファイル名を連番付きで一括変換する方法を解説します。

この記事はこんな人におすすめ!

  • Pythonを学習し始めた人
  • Pythonでファイル名を変更したい人
プログラミング言語の人気オンラインコース
目次

サンプルスクリプト

「rename_test」フォルダにあるtxtファイルの頭に「change_」を追加するとともに、後ろに連番を付け加えるサンプルスクリプトを紹介します。

ファイル変換前

サンプルスクリプトを実行すると頭に追加する名前の入力が求められます。

「change_」と入力すると下のとおりtxtファイル名のみが変更されます。

ファイル変換後
import glob
import os

folder = './rename_test'
addName = input('Input an additional name: ')

fileNames = glob.glob(os.path.join(folder, '*.txt'))

for i, fileName in enumerate(fileNames):
    basename = os.path.basename(fileName)
    title, ext = os.path.splitext(basename)
    os.rename(fileName, os.path.join(folder, addName + title + '_{0:03d}'.format(i+1) + ext))

スクリプトは十数行と短く、とっても簡単ですね。

各処理は次節で解説しますので、まずはフォルダとファイルを用意し、サンプルスクリプトを実行して動作を確認してみて下さい。

スクリプト解説

txtファイルのパス一覧を取得

print(glob.glob('./rename/*.txt'))
# ['./rename_test\\testA.txt', './rename_test\\testB.txt', './rename_test\\change_testC.txt']

glob.glob関数を使うと「rename_test」フォルダからtxtファイルのパス一覧を取得することが出来ます。glob関数はファイルパスとディレクトリパスの一覧を取得しますが、引数にワイルドカードを加えた「*.txt」を含むことで、txtファイルのみのパス一覧取得になります。

パスからファイル名のみ取得

print(os.path.basename('./rename_test/testA.txt'))
# testA.txt

glob.glob関数はパスを含んでしまうので、os.path.basename関数を使ってファイル名のみ取得します。

拡張子を除いたファイル名と拡張子に分離

print(os.path.splitext('testA.txt'))
# ('testA', '.txt')

os.path.splitext関数を使用することで、拡張子を除いたファイル名と拡張子に分離することが出来ます。

ファイル名の変更

os.rename('testA.txt', 'change_testA_001.txt')

os.rename関数を使用することで、ファイル名を「testA.txt」から「change_testA_001.txt」に変更することが出来ます。

まとめ

以上、Pythonで複数ファイル名を連番付きで一括変換する方法の解説でした。

これからは、デジカメで撮った写真ファイルなど複数のファイル名を一括変換することも簡単ですね。

今回の記事が皆さんのPython学習に役立つなら幸いです。

独りでPython学習するのは大変だなと思う方は、書籍やスクールを活用するのも手です。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学で機械工学を学んだ後、製造業で働く40代の会社員です。
IT系、電気系を学んでこなかった機械系人間が、ゲーム制作、電子工作に奮闘してます。
極力低コストでものづくりを楽しむのがモットー。

目次