🦎

フォルダの連番をずらすPythonワンライナー

に公開2

"00-東京都"のように連番付きで都道府県のフォルダを作成したのですが、うっかり1つ抜けてしまい、途中から番号をずらしたくなったということがありました。
Pythonでも使ってさくっと処理しよう~と思ったのですが、意外とさくっといかなかったので備忘録として記録します。

import os, re
[
    os.rename(
        f"{m.group()}",
        f"{int(m.group(1))+1:02}{m.group(2)}"
    )
    for m in (re.search(r"(\d+)(.+)", x) for x in os.listdir())
]

ファイル名を一括で変更したいときってたまによくあるので、もっとスマートな書き方があればいいのですが。

Discussion

shiracamusshiracamus

groupは配列アクセスできます。
mがNoneの場合も考慮した方が良さそうです。

import os, re
[
    os.rename(m[0], f"{int(m[1])+1:02}{m[2]}")
    for m in (re.search(r"(\d+)(.+)", x) for x in os.listdir())
    if m
]

for を並べ替えるのもいいかもしれません。

import os, re
[
    os.rename(m[0], f"{int(m[1])+1:02}{m[2]}")
    for x in os.listdir()
    for m in [re.search(r"(\d+)(.+)", x)]  # 1要素リストをforして変数代入の代用
    if m
]
roro

コメントありがとうございます。
groupが配列アクセス可能というのは知りませんでした!
for文もネストで書いた方がPythonっぽくていいですね。
有益な情報ありがとうございます。