mieki256's diary



2022/06/06(月) [n年前の日記]

#1 [python] ファイルサイズでソートしてリネームするPythonスクリプトを作成

複数の画像ファイルに対して、手作業でリネームしていく作業が面倒臭くなってきたので、自動化すべくPythonスクリプトを書いた。hoge_1920x1080_[0-9]_*.jpg というファイル群に対し、ファイルサイズを元にしてリネームしていくスクリプト。以下のような感じでリネームする。

python sortrename.py PATH0 PATH1 PATH2
hoge_1920x1080_2_.jpg -> hoge_1920x1080_2.jpg
hoge_1920x1080_2.jpg -> hoge_1920x1080_3.jpg
hoge_1920x1080_3.jpg -> hoge_1920x1080_4.jpg

動作確認環境は、Windows10 x64 21H2 + Python 3.9.13 64bit。

まあ、自分しか使わない・使えないスクリプトだけど、その手の処理の参考事例になりそうな気もするし、一応メモ。

_sortrename.py
import sys
import os
import re


def main():
    renamelist = []

    cnt = len(sys.argv)
    if cnt <= 2:
        print("Error : Please select two or more files.")
    else:
        lst = []
        for i in range(1, cnt):
            path = sys.argv[i]
            size = os.path.getsize(path)
            lst.append([path, size])

        slist = sorted(lst, key=lambda x: x[1])
        count = len(slist) + 1
        for v in slist:
            path, size = v
            dirname = os.path.dirname(path)
            filename = os.path.basename(path)
            newfile = re.sub("_\d_*\.jpg", "_%d.jpg" % count, filename)
            newpath = os.path.join(dirname, newfile)
            print("%s -> %s : %d byte" % (filename, newfile, size))
            renamelist.append([path, newpath])
            count -= 1

    if len(renamelist) >= 1:
        v = input("\nRename ? (Y/n)")
        if v == "y" or v == "Y" or v == "":
            for v in renamelist:
                oldpath, newpath = v
                os.rename(oldpath, newpath)
            print("\n%d file renamed." % len(renamelist))
        else:
            print("\nCancel.")

    v = input("\nPush any key")


if __name__ == '__main__':
    main()

2022/06/07追記。 :

このスクリプトは、リネーム後のファイル名が既に存在していた場合、妙な動作になりそうだなと気づいた。おそらく、「リネームできねえよ」とエラーを出しそうな気もするけど…。一旦、重複しないであろう仮ファイル名でリネームしておいて、そこから本当に変更したいファイル名にリネームしたほうがいいのかもしれない。元ファイル名と新ファイル名の他に、仮ファイル名も作ってリストに入れておけば処理ができそう。

以上、1 日分です。

過去ログ表示

Prev - 2022/06 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project