60歳を迎えて、思うこと。 -61ページ目

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

BD-R x 50枚


むか~~~~し

ぶるれこ様

番組録画用に

購入した

25GB の BD-R

あんまり

使わなくて

いまだに

残っている・・・



2024 - 02 - 18

南米の密林で

2090円 50枚


なんか?

おかしくね???

DVD-R

10枚 5000円 くらい
だったのに・・・

BD-R


50枚 約2000円

おっかしいだろ!

 

じじぃ~



 

呼ばれて 飛び出て にゃにゃにゃ~ん

ぎ~こ
ばったん

製造中止
販売中止
入手困難

を 警戒して


早めに 購入していた

ふつう の へっどほん

戦闘開始 で ありんす!


2024 - 02 - 24

に 棒通販サイトで 購入

通電確認も しないで

予備品 だんぼ~~~る箱に

保管していた


青Ver

かなり 劣化して

頭部 への フィット感

激減 ずるずる ズレる

ので

同機種 の 色違いを

予備品として

購入していた・・・

やっと 出番である


じじぃ~

お気に入り 商品

WIMOWEH!!! The Best Of The Tokens

らいおん~~~♪
ねちゃうよ~♪
ねちゃったよ~~♪

映画


最高の人生の見つけ方
さいこうのじんせいのみつけかた
原題: The Bucket List
2007年 アメリカ映画

の 
挿入歌

The Lions Sleeps Tonight

The Tokens



一目ぼれ ならぬ

一「聴」ぼれ して

映画の 
エンドロール
睨め付け

曲名を 確認して・・・

CDを

レンタル

それでは 収まらず・・・

棒フリマサイトで


WIMOWEH!!! The Best Of The Tokens



購入・・・

病気だぜ

ええ~~~曲や!

じじぃ~

お お お 親分 てぇ~~へんだ

むかし
むかし

ずっと
むかし

決まり文句の

時代劇が あった・・・


お お お 親分 てぇ~~へんだ

ど~したい GARA8

さて

むか~~~~し

リッピング して


MP3 192k

にした

BD-R DL


ラベルには 2017-09-29

指折り数えて・・・

・・・指が タリン!




発掘 された・・・

てぇ~~~~へんだ

どうしよう

みなかったことに して

捨てるか???

彷徨う じじぃ~

 

01  01_  01-  と~~~いつ

ぶひぶひ
わんわん

前から

気になっていたんだけど・・・

音楽CDを
リッピングしたとき

ファイル名の先頭が


01 じじぃ~の青春.wav
だったり

01_じじぃ~の青春.wav
だったり

01-じじぃ~の青春.wav
だったり



統一性が 
ない

そこで

【Gemini】様に泣きついて

統一スクリプトを
作成して貰った

試験ば~~~~じょん Rev.なし



ご指摘ありがとうございます。非常に重要な点ですね。
前回のスクリプトでは、ご要望の「ソート順での連番振り直し」と「既存の番号をベースにした処理」が混在していました。特に**曲番の欠番を保持したい**という点と、**既に番号がある場合はソート順での連番振り直しを**「しない(または、既存番号を尊重する)」という意図を理解しました。
いただいた疑問点と新しい要件に基づき、スクリプトのロジックを以下の通りに再構築します。

## 修正ロジックの再確認と変更点
### 1\. 📂 再帰的処理と対象ファイル
  * **変更なし**: `os.walk`で指定フォルダ以下を再帰的に検索し、対象拡張子 (`.wav`, `.wave`, `.mp3`, `.flac`) のファイルのみを処理します。
### 2\. 🔢 曲番付与・書式統一のルール(最重要)
  * **ソート処理の廃止**: **フォルダ内のファイルリストのソートを完全に廃止します。** `os.walk`で取得されたファイルリストをそのまま使用し、既存の曲番の有無と形式によって処理を分岐します。
      * **理由**: 欠番(例: 01, 03)を保持するため、また、既に曲番があるファイルに対しては、曲番を振り直さずに書式統一のみを行うためです。
  * **処理パターン**: ファイル名の**先頭3文字**(`XX` と区切り文字)のみを対象とします。
| ファイル名の現状(先頭3文字) | 処理 | 結果形式 | 例 |
| :--- | :--- | :--- | :--- |
| **`XX-`** (ハイフン型) | **変更しない** | `XX-曲名` | `01-曲名.wav` $\rightarrow$ `01-曲名.wav` |
| **` XX  `** (スペース型) | **`XX-` に統一** | `XX-曲名` | `01 曲名.wav` $\rightarrow$ `01-曲名.wav` |
| **`XX_`** (アンダーバー型) | **`XX-` に統一** | `XX-曲名` | `01_曲名.wav` $\rightarrow$ `01-曲名.wav` |
| **曲番なし** (`X...` または `曲...`) | **ソート順で連番付与** | `XX-曲名` | `曲名.wav` $\rightarrow$ **`01-曲名.wav`** |

  * **補足**: 既存の曲番(例: `01-`)があるファイルは変更しないため、`01`と`03`が存在し、`02`が欠番の場合、リネーム後も`01`と`03`の曲番は維持されます。ただし、曲番なしのファイルが混在する場合、それらはソートされずにリストの出現順(ファイルシステム上の順)に連番が付与されます。


## 🛠 修正後のPythonスクリプト
以下のスクリプトは、上記ロジックに基づいて**ソート処理を削除**し、**既存の番号を尊重**しつつ、**書式統一**と**番号なしファイルへの連番付与**を両立させます。

```python
import os
import re

# =========================================================
# 設定
# =========================================================
# 対象フォルダのパス
# 例: folder_path = "C:\\_CC-Rename"
folder_path = "C:\\_CC-Rename" 

# 対象とする拡張子 (小文字で指定)
TARGET_EXTENSIONS = ('.wav', '.wave', '.mp3', '.flac')
# 正規表現パターン:ファイル名の先頭にある既存の曲番を検出 (XX[ -_])
TRACK_PATTERN_OTHER = re.compile(r"^(\d{2})[\s_]") # XX (スペース) または XX_ (アンダーバー) を検出
TRACK_PATTERN_HYPHEN = re.compile(r"^\d{2}-")      # XX- (ハイフン) を検出 (変更しない対象)
# =========================================================
# メイン処理
# =========================================================

def rename_files_recursively(root_dir):
    """
    指定されたフォルダ以下を再帰的に検索し、ファイル名をリネームします。
    """
    
    for root, dirs, files in os.walk(root_dir):
        # 拡張子でフィルタリング
        target_files = [f for f in files if f.lower().endswith(TARGET_EXTENSIONS)]
        
        if not target_files:
            continue

        print(f"\n--- フォルダ: {root} のファイルを処理中 ---")
        
        # --- 処理対象のファイルを3種類に分類する ---
        
        # 1. 既に「XX-」形式のファイル (変更しない)
        # 2. 「XX 」または「XX_」形式のファイル (書式統一対象)
        # 3. 曲番がないファイル (連番付与対象)
        
        files_no_change = [] # XX-
        files_to_rename = [] # XX や XX_
        files_no_track = []  # 曲番なし

        for f in target_files:
            if TRACK_PATTERN_HYPHEN.match(f):
                files_no_change.append(f)
            elif TRACK_PATTERN_OTHER.match(f):
                files_to_rename.append(f)
            else:
                files_no_track.append(f)
        
        # --- 1. 変更しないファイル (XX-) の処理 ---
        for filename in files_no_change:
            print(f"Skipped: {filename} (既に XX- 形式)")
        
        # --- 2. 書式統一ファイル (XX や XX_) の処理 ---
        for old_filename in files_to_rename:
            name, ext = os.path.splitext(old_filename)
            match = TRACK_PATTERN_OTHER.match(name)
            
            # 曲番と区切り文字を取得し、曲名部分を抽出
            track_prefix = match.group(0) # 例: "01 " または "02_"
            name_stem = name[len(track_prefix):].lstrip()
            
            # 新しいファイル名を作成: 既存の番号 + ハイフン + 曲名
            # 例: "01 " -> "01-"
            new_filename = track_prefix[:2] + "-" + name_stem + ext
            
            old_filepath = os.path.join(root, old_filename)
            new_filepath = os.path.join(root, new_filename)
            
            try:
                os.rename(old_filepath, new_filepath)
                print(f"Renamed: {old_filename} → {new_filename} (書式統一)")
            except Exception as e:
                print(f"⚠️ エラー発生: {old_filename} のリネームに失敗しました。エラー: {e}")

        # --- 3. 曲番なしファイル (連番付与対象) の処理 ---
        
        # **曲番がないファイル**にのみ、連番を付与します。
        # このリストは os.walk の順 (ファイルシステム上の順) のまま処理します。
        
        # 既存のファイル数に基づいて連番のスタート値を決定
        # 全体で何番目から始まるかではなく、この「曲番なし」のリスト内で1から振り直す。
        
        # (重要) 最終的にリネームされるファイル名が既存のファイル名と衝突しないように、
        # ファイルリスト全体で未使用の連番から始める方が安全ですが、
        # ご要望が「ソート順で連番付与」であるため、ここではファイルリストの出現順に連番を振ります。
        # なお、通常、WindowsやmacOSのファイルシステムはファイル名をアルファベット順に返す傾向があるため、
        # 結果的にアルファベット順になることが多いです。
        
        for i, old_filename in enumerate(files_no_track, start=1):
            name, ext = os.path.splitext(old_filename)
            new_track_number = f"{i:02d}-" # 新しい曲番 (例: 01-, 02-)
            
            new_filename = new_track_number + name + ext
            
            old_filepath = os.path.join(root, old_filename)
            new_filepath = os.path.join(root, new_filename)
            
            try:
                os.rename(old_filepath, new_filepath)
                print(f"Renamed: {old_filename} → {new_filename} (連番付与)")
            except Exception as e:
                print(f"⚠️ エラー発生: {old_filename} のリネームに失敗しました。エラー: {e}")


# スクリプトの実行
if __name__ == "__main__":
    if os.path.isdir(folder_path):
        # 実行前に最終確認を促すメッセージ
        print("====================================================")
        print("⚠️ 警告: ファイルリネーム処理を開始します。")
        print("   必ず対象フォルダのバックアップを取ってください!")
        print("   続行するには 'y' を入力してください。")
        print("====================================================")
        
        confirmation = input("続行しますか? (y/N): ")
        if confirmation.lower() == 'y':
            rename_files_recursively(folder_path)
            print("\n✅ 全ての処理が完了しました。")
        else:
            print("\n❌ 処理をキャンセルしました。")
    else:
        print(f"❌ 指定されたフォルダパスが見つかりません: {folder_path}")

# ==============================


## 🔎 疑問点に対する回答と確認事項
### 1\. 「ソート禁止」について
  * **対応済**: スクリプトから`sorted()`関数を削除しました。
  * **影響**:
      * **既存の曲番付きファイル**: 曲番がそのまま維持されるため、欠番があっても連番の振り直しは行われず、ご要望通りになります。
      * **曲番なしファイル**: ファイルシステムが返す順序(多くの場合アルファベット順)に基づいて連番が付与されます。
### 2\. 「先頭3ケタ」以外にハイフンがあっても大丈夫か?
  * **対応済**: 正規表現はファイル名の**先頭**のみをチェックしています。
      * `TRACK_PATTERN_OTHER = re.compile(r"^(\d{2})[\s_]")`
      * `01_本日は_晴天なり` というファイル名の場合、先頭の `01_` にのみマッチし、ファイル名からその部分を削除して `01-` を付与します。
      * 結果は `01-本日は_晴天なり` となり、途中の `_` は変更されません。**絶対禁止**の動作は発生しません。
### 3\. 他の処理について質問はありますか?
はい、以下の点について確認させてください。
  * **欠番の再連番**: **曲番なしファイルが複数ある場合**、これらを連番で処理しますが、もし「曲番なし」ファイルを**フォルダ内のアルファベット順に並べ替えたい**場合は、`files_no_track` リストの処理の前に `files_no_track.sort()` を入れる必要があります。このままでよろしいでしょうか?
  * **曲番の桁数**: 現在、`XX` の2桁のみを対象としています。リッピングするアルバムは2桁で収まる(最大99曲)という認識でよろしいでしょうか?(例: `00-`, `01-`, ..., `99-`)
  * **ファイル名の大文字・小文字**: 拡張子は大文字・小文字の区別なく処理していますが、ファイル名自体は大文字・小文字を区別してリネームしています。
このスクリプトと確認事項について、ご意見をお聞かせください。
# ==============================

感謝である

おんらいん ばっくあっぷ

じじぃ~