こんにちは。オンライン授業により大量のPDFファイルがPCにたまっています。
ぱっと見てファイルの時系列が分かると便利なのですが, いちいち自分で入力していくのは面倒くさいので自動化してみましょう。
目標とする仕様
"hello.pdf"(2021-06-09作成)のようなファイルがあった場合, "0609_hello.pdf"とリネームします。
ただし, "0604_hoge.pdf"(2021-06-09作成)のようなファイルはそのままの名前で残すこととします。
##コード
rename.py
import glob
import os
import time
import mimetypes
import re
def rename(files):
for f in files:
file_type = mimetypes.guess_type(f)[0]
if file_type == "application/pdf": #pdfかどうか
(i,old_name) = os.path.split(f)
if not re.match(r"[0-1]\d{3}",old_name): #先頭にすでに日付が入っていたらスキップ。数字4桁でマッチすると2021_hoge.pdfのようなものも許してしまうので先頭ではじきましょう。
t = time.localtime(os.path.getctime(f))
date = str(format(t.tm_mon,'02')) + str(format(t.tm_mday,'02')) #2桁で月日を表現
new_name = date + "_"+ old_name
new_path = os.path.join(i,new_name)
os.rename(f,new_path)
def collect_files(p,r): #再帰的に
d = glob.glob(os.path.join(p,"*"))
for i in d:
if os.path.isdir(str(i)):
collect_files(i,r)
else:
r.append(i)
return r
if __name__ == "__main__":
a = collect_files("./",[])
rename(a)
終わりに
コードは見たまんまです。意外と汎用性が高そうですね。
os.path.splitなどパスを扱うライブラリが想像以上にしっかりしていて便利でした。覚えておこう......
より良いコードなどありましたらお教えいただけますと幸いです。
では, この辺で