16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python 同じ名前のファイルが在ればリネームする。

Last updated at Posted at 2018-11-08

./test.txt というファイルが予め在れば、
./test(001).txt とリネームされる。

import os
import re
import shutil

filePath = "./test.txt"
# 値はフルパスで渡す
go = duplicate_rename(filePath)
# ファイルを移動
shutil.move(filePath, go)

# 同じファイル名が存在するかチェック
def duplicate_rename(value, count=1):
    if os.path.exists(value):
        # 存在した場合

        # フルパスから「フルパスタイトル」と「拡張子」を分割
        ftitle, fext = os.path.splitext(value)

        # タイトル末尾に(数値)が在れば削除する。
        newftitle = re.sub(r'\(\d{3}\)$', "", ftitle)

        # (001) という文字列を作成
        addPara = '(' + '{0:3d}'.format(count) + ')'

        # フルパスタイトル + (001) + 拡張子のファイル名を作成
        fpath = os.path.join(newftitle + addPara + fext)

        # リネームしたファイルを表示
        print('Rename: %s' % fpath)

        # 再度渡してリネームしたファイル名が存在しないかチェック
        return (duplicate_rename(fpath, count + 1))
    else:
        # 存在しない場合
        return value

更新

  • 2018/11/10 二つ以上同じ名前のファイルがあると、 text(002).txt ではなくて、 text(001)(002).txt となってしまっていたのを改善。

別の方法を思いついたので書き込み

上記の方法は再帰とimport reで正規表現も使用して書いたもので、今回はWhile を用いてループ処理で行うようにしたからimportosのみで良いようにした。

import os
import shutil

file_path = './test.txt'
 
def duplicate_rename2(file_path):
    if os.path.exists(file_path):
        name, ext = os.path.splitext(file_path)
        i = 1
        while True:
            # 数値を3桁などにしたい場合は({:0=3})とする
            new_name = "{} ({}){}".format(name, i, ext)
            if not os.path.exists(new_name):
                return new_name
            i += 1
    else:
        return file_path

# ファイル名
new_path = duplicate_rename2(file_path)
# ファイルを移動
shutil.move(file_Path, new_path)
16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?