Pythonで指定したフォルダ配下のすべてのファイルに対してファイル名に含まれる全角を半角にしてリネーム

全角の数字やアルファベット、全角スペースがファイルに含まれていると検索するときに面倒なので一括でリネームしたくなるというのが動機。

import jaconv  # 別途pipでインストールが必要
import pathlib
import os
data_path=pathlib.Path(r'/path/to/target/')
for pdf_path in data_path.glob('**/*.pdf'):  # これは拡張子がpdfの例
   os.rename(str(pdf_path), pdf_path.parent.joinpath(jaconv.z2h(pdf_path.name,digit=True, ascii=True, kana=False)))

結果は省略。なお無理やり変な文字列でリネームしようとするとエラーになるとは思うけどファイルが消えたとか責任は負いませんので自己責任でお使いください。

修正(2021/1/17)

ファイル名に無効な文字列が含まれると失敗するので修正。ついでにTkinterのダイアログを使ってディレクトリを選択できるようにした。あとpdfをターゲットにしていたが、大文字でPDFも対象にできるようにした。

import jaconv
import pathlib
import os
import tkinter.filedialog
import tkinter as tk

# 余分なWindowを消すおまじない
root = tk.Tk()
root.withdraw()

iDir = os.path.abspath(os.path.dirname('__file__'))
folder_name = tkinter.filedialog.askdirectory(initialdir=iDir)

if folder_name is "":
   print("Canceled")
   exit()
data_path = pathlib.Path(folder_name)

for pdf_path in data_path.glob("**/*.[pP][dD][fF]"):
   
   newname = pdf_path.parent.joinpath(jaconv.z2h(pdf_path.name, digit=True, ascii=True, kana=False))
   if '[' in newname.name:  # ファイル名に'['と']'は使えないため
       newname = newname.name.replace('[','【').replace(']','】')
   print("rename ", str(pdf_path), pdf_path.parent.joinpath(newname))
   os.rename(str(pdf_path), pdf_path.parent.joinpath(newname))
       
print("Done")

この記事が気に入ったらサポートをしてみませんか?