BBlog

備忘Log(備忘録です)

【Python】指定フォルダ内のファイルの一括連番リネームする

概要

Pythonの勉強を始めたため備忘録として記事を作成
「指定フォルダ内のファイルの一括連番リネーム」するものを作成したため過程で学んだことなどを記載

成果物

github.com

使い方(GitHubにも記載済み)

YAMLファイルにパラメータを記述し実行する方法
「parameters.yml」内にある上記のパラメータを変更

「FileRenameSerialNumberByYAMLParams.bat」を実行

コマンドプロンプトからパラメータを指定して実行する方法
「FileRenameSerialNumber.bat」を実行すると各パラメータの入力を求められるので入力する。

いろいろ覚えたことの備忘録

実行ファイルのパスを取得
print(__file__)

# 結果
h:\HOGE\HOGE\HOGEHOGE\test.py
実行ファイルのディレクトリのパスを取得
print(os.path.dirname(__file__))

# 結果
h:\HOGE\HOGE\HOGEHOGE
文字列のフォーマット
a = 10
b = 99

str1 = "number={} and {}".format(a, b)
str2 = f"number={a} and {b}"

# 結果
number=10 and 99
文字列にパターンとマッチする部分があるかを調べる
# ファイル名で使用できない文字が含まれていないか調べる
fileName = "aa?aaa"
if re.search(r'[\\|/|:|?|.|"|<|>|\|]', fileName):
    print("NG")

# 結果
NG
フォルダ内のファイルから「ファイル」のみを取得(フォルダを除く処理)の内包表記
files = os.listdir(dirPath) # フォルダ内の全ファイル取得
files = [f for f in files if os.path.isfile(os.path.join(dirPath, f))] # フォルダ内の全ファイル取得
取得したファイルの「作成日」順でソート(昇順)
# ファイル名で使用できない文字が含まれていないか調べる
files = os.listdir(dirPath) # フォルダ内の全ファイル取得
files = [f for f in files if os.path.isfile(os.path.join(dirPath, f))] # フォルダ内の全ファイル取得

# ソート(reverse=Trueで降順)
files = sorted(files, key=lambda f: os.stat(os.path.join(dirPath, f)).st_ctime, reverse=False)
取得したファイルの「ファイル名」(文字列)順でソート(昇順)
files = os.listdir(dirPath) # フォルダ内の全ファイル取得
files = [f for f in files if os.path.isfile(os.path.join(dirPath, f))] # フォルダ内の全ファイル取得

# ソート(reverse=Trueで降順)
files = sorted(files, key=lambda f: f, reverse=False)
for文でインデックスと要素を同時取得
files = os.listdir(dirPath) # フォルダ内の全ファイル取得
files = [f for f in files if os.path.isfile(os.path.join(dirPath, f))] # フォルダ内の全ファイル取得

# for文
for index, file in enumerate(files):
    print(f"{index} : {file}")
配列の最後の要素を取得
a = [1,2,3,4,5]
print(a[-1])

# 結果
5
コマンドプロンプトから呼ばれた際の引数を取得する
# 呼び出し側
python test.py a 111 ZZZ

# python側
args = sys.argv
print(args[0])
print(args[1])
print(args[2])
print(args[3])
print(len(args))

# 結果
test.py
a
111
ZZZ
4
YAMLファイルの読み込み、要素の取得
with open(INFO_YAML_FILE_PATH) as yamlFile: # YAMLファイルを開く
    yamlText = yaml.safe_load(yamlFile) # YAMLファイルのロード
    dirPath = yamlText[YAML_KEY_DIR_PATH] # Keyでアクセス

最後に

学習し始めはなんでも面白いもので止まらない。
Unityの学習を怠ってしまっている・・・。(ヤバイ)

まだ初学者ゆえ間違っていることやこうした方がいいと思うことがあったら優しくコメントください。<(_ _)>