import os import random, string
# @brief ダミーファイル名を作成 # @details 処理時、一度この名前でファイルを書き換えてから目的の名前に変更する # @sa https://qiita.com/Scstechr/items/c3b2eb291f7c5b81902a def create_random_filename(): n = 10 dummy = '' while True: dummy = ''.join(random.choices(string.ascii_letters + string.digits, k=n)) # 生成した文字列をファイル名とするファイルが存在しなければ処理を終了 if os.path.exists(dummy) == False: break return dummy
# @brief ファイル名の変更規則一覧作成 # @param [in] _format_ ファイル名の書式 # @param [in] _range_ 元のファイルの番号の範囲 # @param [in] _new_offset_ 新しい番号の先頭番号 # @return [ 現在のファイル名 , ダミーファイル名 , 変更後のファイル名 ] のリスト def sequence_filename( _format_ , _range_, _new_offset_ ): Li=[] dir = os.path.dirname( _format_ ) + "/" for i in _range_: # 変更したい対象のファイル名を作成 fname = _format_ % i retfname = _format_ % (_new_offset_ + i - _range_[0])# 新たなファイル名を作成 # ランダムなファイル名作成 dummyname = dir + create_random_filename() Li.append([fname,dummyname,retfname]) return Li
def filename_shift( _format_ , _start_,_stop_, _new_offset_): Li = sequence_filename( _format_ , range(_start_,_stop_+1), _new_offset_ ) # 現在のファイル名 → ダミーファイル名 for j in Li: os.rename(j[0],j[1]) # ダミーファイル名 → 目的のファイル名 for j in Li: os.rename(j[1],j[2])
############################################ ############################################ ############################################ # 50番~のファイル名を300番~に変更 filename_shift( "files/data-%04d.txt" , 50,55,300 )