リキッドジャンパー Python Pythonでディレクトリ内のファイル名を一括変更する|ビジネスで使える自動処理プログラミング[業務効率化]

Pythonでディレクトリ内のファイル名を一括変更する|ビジネスで使える自動処理プログラミング[業務効率化]

python_file_rename_topimage

すごい数のファイル名の変更を頼まれちゃった!どうしよう


ファイルを扱う作業で良くあるのが名前の変更

1つや2つ、数えられる程度の数なら直接ファイルの名前を変更してしまっても問題ありませんが、ディレクトにある全ファイルの名前を変更するとなると、ファイル数によっては気が遠くなる事も。

Pythonを使えば、ファイル名の変更、そしてディレクトリ下の全ファイルを取得は簡単にできます。

つまり、この2つの処理を組み合わせれば「ディレクトリ内のファイル名を一括変更」も簡単に処理できるはず。

この記事では、Pythonで指定したディレクトリ下のファイル名を一括変更する方法を紹介します。

特定の拡張子のファイルのみ、サブディレクトリを外してファイル名の変更処理する方法も紹介するので参考にしてみてください。

Pythonでファイル名を変更する

Pythonでファイル名を変更するには osモジュールの

os.rename()


を使用します。

ディレクトリ[D:/liquidjumper/]にあるテキストファイル「old_name_textfile.txt」を「new_name_textfile.txt」に変更してみましょう。

Pythonでファイル名を変更する


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」に変更されました。

「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.listdir()を使ってディレクトリ内のファイル名を一括変更する

特定の拡張子のファイルのみファイル名を一括変更する

ディレクトリにある全ファイルのファイル名を変更できましたが、特定のファイル形式だけのファイル名を変更するにはどのようにしたら良いのでしょう。

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()を実行、全てのファイルの拡張子は変更せずファイル名を変更しました。

ディレクトリORファイルを確認しファイルのみファイル名を一括変更する




ネットショッピングをする感覚で講座を購入し、動画を視聴して学習するシステムのUdemy

そのUdemyで評価が高いPythonの人気講座といえば、現役シリコンバレーエンジニア「酒井潤」講師の講座。 Pythonの書き方だけでなくシリコンバレー仕込みの Pythonic(パイソニック)と称されるPythonらしいコードの記述方法や実務での所作まで学べます。

「現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル」
現役シリコンバレーエンジニアが教えるPython入門!応用では、データ解析、データーベース、ネットワーク、暗号化、並列化、テスト、インフラ自動化、キューイングシステム、非同期処理など盛り沢山の内容です!


BTOパソコンの草分け的ブランドFRONTIER(フロンティア)

教育機関や研究施設/3DCG/動画編集/そしてゲームプレイに。
用途に合わせてCPUやGPUなどパーツを自由に選べて、コスパにもこだわる方にオススメ。

ボーナス祭!開催中\GeForce RTX 3070 Tiなど最新GPUを搭載した人気モデルが超特価で登場!/6/25(金)15時まで

≪GeForce RTX 3070 Ti≫≪GeForce RTX 3080 Ti≫を搭載した高性能PCが衝撃コスパで購入できます。

Core i7 + RTX 3060モデルが税込16万円台、Ryzen 7 + RTX 3070モデルが21万円台、Core i7 + GTX 1660モデルが12万円台、Core i7 + RTX 3070 Tiモデルが22万円台

≪全18機種≫見逃し厳禁!SALE製品は台数に限りがあるので売り切れる前に是非

>>【FRONTIER】


【デジハリONLINEの 基礎動画 + AdobeCC一年ライセンス のお得プラン】

デジタルハリウッドのオンラインCGスクール「デジハリONLINE」が提供する、60時間の基礎動画とAdobe creative cloudの一年版ライセンスがパッケージされた、コスパ最強の講座プラン

「Adobeマスター講座」

受講ノルマは一切無し、Adobe製品の利用を目的に契約してもOK!

>>デジハリONLINE講座申込

▶︎基礎動画教材付きAdobe Creative Cloudを年額39,980円(税込)のお得な価格で使用する方法


Twitter Facebook Pocket LINE はてブ

おすすめの関連記事
コチラの記事も読まれています
あわせてよく読まれている記事