【Python】ディレクトリの中のファイル名を一括でリネームする

python

Pythonを使って複数のファイルを一括でリネームする方法についてです。

Windows上でもファイルのリネームはツールを使うことで結構簡単にできたりします。例えば、私がよく使う「Flexible Renamer」というフリーのツールは、ファイル名の後ろに連番や日時を付けたり、ファイル名の一部だけを削除したり、といったリネーム操作を複数のファイルに対して一括で出来る便利なツールです。

 ただ、連番や特定の文字を追加するといった一定の規則でしかリネームできないため、例えば、Aというファイル名をBに、Cというファイル名をDに、といったようにファイル名を指定して一括で変更するようなことはできません。

そこで、あらかじめ変更前と後のファイル名をCSVで準備しておき、そのCSVに従ってディレクトリの中のファイル名を一括で変更するスクリプトを作成しました。

では、参考プログラムと手順について説明します。

【準備】CSVファイルを準備する

元のファイル名と変更したいファイル名を記入したCSVファイルを準備します。

CSVのルールは、

  • 1列目に元のファイル名、2列目に変更後のファイル名を書く
  • UTF-8 で保存する

これだけです。

【実行】ファイル名をリネームする

それでは準備したCSVファイルとスクリプトを使ってファイル名をリネームします。

サンプルコード

rename.py

import os
import shutil
import csv
import argparse

# オプション引数を取得する
def get_params():
    parser = argparse.ArgumentParser(description='file rename')
    parser.add_argument("-i", "--input_dir", type=str, required=True, help='input_dir')
    parser.add_argument("-o", "--output_dir", type=str, default="./output", help='output_dir')
    parser.add_argument("-c", "--csv_file", type=str, required=True, help='csv_file')
    args = parser.parse_args()
    return args

# CSVから変更前と変更後のファイル名を積んだリネームリストを生成する
def create_renanme_list(csv_file):
    rename_list = []
    with open(csv_file, encoding="utf-8") as f: # csvファイルを開く
        reader = csv.reader(f)  # csv読込
        for row in reader:  # 1行ずつ取得    
            rename_list.append(row)
    return rename_list

# 入力ディレクトリの中のファイルをリネームして出力ディレクトリにコピーする
def rename_file(input_dir, output_dir, csv_file):

    # 出力ディレクトリがない場合は空のディレクトリを生成
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)  

    # CSVからリネームリストを生成
    rename_list = create_renanme_list(csv_file)
    
    # ファイル名を変更してコピーする
    for list in rename_list:
        if len(list) < 2:
            continue
        org_file = list[0]
        org_file_path = os.path.join(input_dir, org_file)
        if os.path.isfile(org_file_path):
            dst_file = list[1]
            dst_file_path = os.path.join(output_dir, dst_file)
            shutil.copy2(org_file_path, dst_file_path)
            print(org_file, "->", dst_file)

if __name__ == '__main__':
    params = get_params()
    input_dir = params.input_dir
    output_dir = params.output_dir
    csv_file = params.csv_file
    rename_file(input_dir, output_dir, csv_file)

作成したスクリプトの概要は、

1.引数で 次の3つを与える

  • 入力ディレクトリパス ・・・ 変更したいファイルを集めたディレクトリのパス
  • 出力ディレクトリパス ・・・ 変更後のファイルを置くディレクトリのパス
  • CSVファイルパス ・・・ 準備したCSVファイルのパス

2.入力ディレクトリからCSVに書かれた元のファイル名のファイルを探す

3.ファイルをCSVに書かれた変更後のファイル名で出力ディレクトリにコピーする

です。

実行コマンド例

python ./rename.py -i ./test/ -o ./output/ -c ./list.csv

結果

出力ディレクトリにファイル名を変更したファイルが出来ます。

コメント

  1. kamagra 25 mg prix

    commander kamagra en ligne sans ordonnance

  2. ordering enclomiphene buy online australia

    online order enclomiphene purchase england

  3. online order androxal generic tablets

    how to order androxal cheap usa

  4. How to get flexeril cyclobenzaprine perscription

    buy flexeril cyclobenzaprine price london

  5. dutasteride where to buy canada

    get dutasteride purchase in canada

  6. ordering gabapentin generic online canada

    online order gabapentin generic available

  7. how to order fildena usa suppliers

    cheap fildena canada drugs

  8. get itraconazole cheap drugs

    order itraconazole generic online buy

  9. buy avodart online london

    avodart cash on delivery overnight

  10. buy cheap rifaximin generic now

    online order rifaximin generic ireland

  11. buy xifaxan uk how to get

    ordering xifaxan no prescription online

  12. nízká cena kamagra bez lékařského předpisu

    koupit obecný kamagra bez lékařského předpisu

タイトルとURLをコピーしました