すごい数のファイル名の変更を頼まれちゃった!どうしよう
ファイルを扱う作業で良くあるのが名前の変更
1つや2つ、数えられる程度の数なら直接ファイルの名前を変更してしまっても問題ありませんが、ディレクトにある全ファイルの名前を変更するとなると、ファイル数によっては気が遠くなる事も。
Pythonを使えば、ファイル名の変更、そしてディレクトリ下の全ファイルを取得は簡単にできます。
つまり、この2つの処理を組み合わせれば「ディレクトリ内のファイル名を一括変更」も簡単に処理できるはず。
この記事では、Pythonで指定したディレクトリ下のファイル名を一括変更する方法を紹介します。
特定の拡張子のファイルのみ、サブディレクトリを外してファイル名の変更処理する方法も紹介するので参考にしてみてください。
|
Pythonでファイル名を変更する
Pythonでファイル名を変更するには osモジュールの
os.rename()
を使用します。
ディレクトリ[D:/liquidjumper/]にあるテキストファイル「old_name_textfile.txt」を「new_name_textfile.txt」に変更してみましょう。
os.rename()でファイル名を変更するには、os.rename()の第1引数に元のファイルパス、第2引数に変更後のファイルパスを指定するだけ。
import os
before_name = "D:/liquidjumper/old_name_textfile.txt"
after_name = "D:/liquidjumper/new_name_textfile.txt"
os.rename(before_name , after_name)
実行:
「old_name_textfile.txt」から「new_name_textfile.txt」に変更されました。
変更後のファイルパスのディレクトリは別の場所を指定しても構いませんが、注意点はディレクトリが無い場合はエラーになる事。
別のディレクトリに保存する場合はos.rename()を実行する前に、保存先ディレクトリの有無を確認してください。
Pythonのos.listdir()を使ってディレクトリ内のファイル名を一括変更する
Pythonでファイル名を変更する方法が分かったので、次は指定したディレクトリ内のファイル名を一括変更してみましょう。
手順としては、
1)最初にディレクトリ内の一覧をリストで取得
2)for文でリストから取り出しos.rename()でファイル名を変更
Pythonでディレクトリ内の一覧を取得するには os.listdir() を使用します
os.listdir()にディレクトリのパスを指定、返されるディレクトリ内の一覧のリストを[dir_list]に代入。
for文で[dir_list]からディレクトリ名・ファイル名を取り出し、os.path.join()でフルパスにし変換、os.rename()でファイル名を変更します。
import os
dir_path = "D:/liquidjumper/"
dir_list = os.listdir(dir_path)
for i in range(len(dir_list)):
new_file_name = "new_name_{}.txt".format(i) #ファイル名 "new_name_"+ 連番 + ".txt"
os.rename(os.path.join(dir_path,dir_list[i]),os.path.join(dir_path,new_file_name))
実行:
指定ディレクトリ直下の全ファイルのファイル名が連番で変更されました。
特定の拡張子のファイルのみファイル名を一括変更する
ディレクトリにある全ファイルのファイル名を変更できましたが、特定のファイル形式だけのファイル名を変更するにはどのようにしたら良いのでしょう。
Pythonは、os.pathモジュールの関数 splitext() でファイルパスから拡張子を分割する事ができます。
この関数でファイル名から拡張子を取得、if文で条件分岐させれば、指定したファイル形式だけのサイズが取得できそう。
for文で[dir_list]から取り出したファイル名を、os.path.splitext()[1]に指定、拡張子を取得。
if文で拡張子[.txt]と合致した場合のみ、os.rename()でファイル名を変更する。
import os
dir_path = "D:/liquidjumper/"
dir_list = os.listdir(dir_path)
for i in range(len(dir_list)):
if ".txt" == os.path.splitext(dir_list[i])[1]: # os.path.splitext()[1]で拡張子を取得
new_file_name = "new_name_{}.txt".format(i)
os.rename(os.path.join(dir_path, dir_list[i]), os.path.join(dir_path, new_file_name))
実行:
拡張子「.txt」のテキストファイルだけファイル名を変更しました。
|
ディレクトリORファイルを確認しファイルのみファイル名を一括変更する
指定のディレクトリ直下の全ファイルの名前を変更する事ができましたが、ファイルの他にディレクトリが混ざっている場合も考えられます。
Pythonで「ファイル」OR「ディレクトリ」かを調べるには次の方法があります。
・指定したパスがファイルかどうかを確認する場合:os.path.isfile(パス)
・指定したパスがディレクトリかどうかを確認する場合:os.path.isdir(パス)
では、os.path.isfile(パス)を使用して、指定したディレクトリのサブディレクトリを避けてファイル名を変更してみたいと思います。
import os
dir_path = "D:/liquidjumper/"
dir_list = os.listdir(dir_path)
for i in range(len(dir_list)):
full_path = os.path.join(dir_path, dir_list[i])
if os.path.isfile(full_path): #ディレクトリORファイルを確認、ファイルのみ処理
new_file_name = "new_name_{0}{1}".format(i,os.path.splitext(dir_list[i])[1]) #拡張子は変更しない
os.rename(full_path, os.path.join(dir_path, new_file_name))
実行:
サブディレクトリを外しos.rename()を実行、全てのファイルの拡張子は変更せずファイル名を変更しました。
|
自宅からでもWeb制作・プログラミング・アプリ開発などが習得できるさまざまなコースをラインナップ。
非エンジニアでスキルを磨きたい方から、フリーランス、就職/転職を目指す方まで、専属のメンターがサポート。
最近は副業ブームもあり「 はじめての副業コース 」が人気です。
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|