デジカメで撮った写真ファイルなど複数のファイル名を一括変換したいことがありますよね?
今回は、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学習するのは大変だなと思う方は、書籍やスクールを活用するのも手です。
最後までお読み頂きありがとうございました。