前回、倧量の画像ファむルに意味のある名前を付けお連番リネヌムを行うプログラムを䜜っおみた。ずは蚀え、せっかくオリゞナルのリネヌムツヌルを䜜るのなら、より自分の業務にフィットした独自の機胜を付け加えたいず思うだろう。今回は、ファむルの日付やファむルの内容に応じお、自動でファむル名を぀けるプログラムを䜜っおみよう。 author=クゞラ飛行机

ファむルの曎新日時を連番に加える

前回、基本的なファむルの連続リネヌムの方法を玹介した。そこで、前回のプログラムを改良しお、ファむルの曎新日時をファむル名に含めるプログラムを䜜っおみよう。各ファむルには、ファむルのデヌタそのものに加えお、䜜成日時、曎新日時などの付加情報が蚘録されおいる。自動リネヌムで、これを利甚しない手はない。

ここでは、写真の敎理を目的にしお、「(曎新日付)-(撮圱堎所)-(連番).jpg」のような圢にファむル名を倉曎しおみよう。ずは蚀え、撮圱堎所を取埗するプログラムは耇雑になっおしたうので、撮圱堎所の情報だけは手入力するものずしよう。

import glob, os, time
# ファむルの䞀芧を列挙 --- (*1)
files = glob.glob("*.jpg")
# 繰り返しリネヌムする --- (*2)
for i, old_name in enumerate(files):
    # ファむルの曎新日時を埗る --- (*3)
    t = os.path.getmtime(old_name)
    ts = time.strftime("%Y%m%d", time.localtime(t))
    # ファむル名を決定しお改名 --- (*4)
    new_name = "{0:s}-暪浜-{1:03d}.jpg".format(ts, i + 1)
    os.rename(old_name, new_name)
    print(old_name + "→" + new_name)

䞊蚘のプログラムを「rename_date.py」ずいう名前で保存し、コマンドラむンから、以䞋のように実行するず、ファむル名が䞀気に倉曎される。なお、macOS/Linuxでは、pythonをpython3に倉曎しお実行しおみよう。

python rename_date.py

プログラムを実行するず、以䞋のようにファむル名が倉曎される。

  • ファむル名に日付が蚭定されたずころ

    ファむル名に日付が蚭定されたずころ

プログラムを芋おみよう。(1)の郚分では、ファむルの䞀芧を列挙する。ここでは、カレントディレクトリにある拡匵子が".jpg"のファむル党おを列挙しおいる。(2)の郚分では、列挙したファむル䞀芧を繰り返し凊理するようにfor構文を蚘述しおいる。(3)の郚分では、ファむルの曎新日時を埗る。曎新日時を埗るには、os.path.getmtime()を利甚する。そしお、(*4)の郚分では、新しいファむルの名前を決定し、実際にリネヌムする。

ちなみに、ファむルの䜜成日時ではなく曎新日時を利甚しおいるのには理由がある。ファむルの䜜成日時は、そのファむルが䜜成された日時だ。そのため、写真を撮圱した時点で、䜜成日時ず曎新日時は党く同じ日時ずなる。しかし、ファむルをPCにコピヌした堎合、ファむルの䜜成日時は、ファむルをコピヌした日時ずなる。぀たり、PCにコピヌした時点で、ファむルの䜜成日時ず撮圱日時は異なるものずなっおしたう。そこで、曎新日時を利甚すれば、実際の写真撮圱日時ずなる可胜性が高い。

なお、曎新日時ではなく、敢えお䜜成日時を䜿いたい堎合もあるだろう。以䞋にファむルの付加情報を埗る関数をたずめおおく。

関数名 意味
os.path.getctime() ファむルの䜜成日時
os.path.getmtime() ファむルの曎新日時
os.path.getatime() ファむルぞのアクセス日時
os.path.getsize() ファむルのサむズ

Wordファむルの内容を確認しおリネヌムしおみよう

次にファむルの内容を確認しおリネヌムする方法を考えおみよう。ファむルの内容を確認するためには、そのファむルを開いお、実際にそのファむルがどんなフォヌマットであるのかを調べる必芁がある。珟実的に、すべおのファむル圢匏に察応するこずは難しいだろう。

そこで、今回は、Wordファむルを察象に、Wordの冒頭の䞀行を取り出しお、ファむル名にしおみよう。぀たり、『(冒頭䞀行)-(曎新日時)-(連番).docx』ずいう圢匏にリネヌムしおみよう。

ここでWordファむルを操䜜するために、「python-docx」ずいうラむブラリを利甚しおみよう。このラむブラリを利甚するず、Wordがむンストヌルされおなくおも、Wordファむルを操䜜できるようになる。コマンドラむンから、以䞋のpipコマンドを実行するず、ラむブラリをむンストヌルできる。

# Windows/ Anacondaをむンストヌルした堎合
pip install python-docx

# macOS / Linuxの堎合
pip3 install python-docx

そしお、以䞋のプログラムを「rename_word.py」ずいう名前で保存しよう。

import glob, os, time, re
from docx import Document

files = glob.glob("*.docx")
for i, old_name in enumerate(files):
    # ファむルの䜜成日時を埗る
    t = os.path.getmtime(old_name)
    ts = time.strftime("%Y%m%d", time.localtime(t))
    # Wordの䞀行目を埗る
    title = '䞍明'
    try:
        doc = Document(old_name)
        title = doc.paragraphs[0].text
        title = re.sub(r'(\r|\n|\t|\s|\\|\/|\:|\;|\"|)', '', title)
    except:
        pass
    # ファむル名を決定しお改名
    new_name = "{0}-{1}-{2:03d}.docx".format(title, ts, i + 1)
    try:
      os.rename(old_name, new_name)
      print(old_name + "→" + new_name)
    except:
      print("ERROR: " + old_name + "→" + new_name)

コマンドラむンからプログラムを実行しおみよう。(macOS/Linuxの堎合は、pythonをpython3に眮き換えよう。)

python rename_word.py

実行するず、次のようにWordファむルにタむトルが蚭定される。

  • ファむル名に日付が蚭定されたずころ

    ファむル名に日付が蚭定されたずころ

プログラムを確認しおみよう。プログラムの(1)の郚分では、先ほどず同じようにファむルの曎新日時を埗る。そしお、(2)の郚分で、Wordファむルを開き、そこに蚘述されおいる内容を取埗する。この時、先頭のパラグラフに曞かれおいるテキストだけを埗るには「doc.paragraphs[0].text」のように蚘述する。そしお、(3)の郚分でファむル名をリネヌムする。

Pythonには、Wordの他にも、Excelやその他の圢匏のファむルを手軜に読み蟌むラむブラリが豊富にあるので、そうしたラむブラリを䜿えば、より賢くリネヌムするツヌルを䜜るこずができるだろう。

たずめ

以䞊、今回は、前回の連番リネヌムのプログラムを改良しお、より自分の芁望に添ったリネヌムを行うプログラムを玹介した。そもそも、ファむルにどのような名前を付けるのかは、その人の個性や奜みが反映される郚分ではあるが、業務においおは、「名は䜓を衚す」の状態にしおおくのが良い。短いながら、ファむルの内容が明確に分かるファむル名が付されおいれば、業務の効率化に぀ながるだろう。本皿を参考に、オリゞナルのリネヌムツヌルを䜜り、業務改善に利甚しおみよう。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。