スポンサーリンク

連番ファイル名の番号をシフトするpythonスクリプト

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 )

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: