ふぁいる整理の 日々 つづき | 60歳を迎えて、思うこと。

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

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

ふぁいる整理の 日々 つづき

60年 たまりにたまった

ふぁいる!


日々
お掃除中

さて

ごみのようま

ファイルサイズ

を 集めた!

10ばいといかの
ふぁいるの しょうたいは

なに???

開いてみる

空っぽである!

なぜ???

からっぽ 削除
すくりぷと で

削除できない???

【chatGPT】様に
なんでやねん!

必殺技 を 伝授される

# ==== 【chatGPT】様
結論から言うと、それは**「見えない文字だけが入っている」状態**です。壊れてるわけじゃなくて、ちゃんと中身はあります。
よくある正体はこのあたり👇

### ■ よくある原因
#### ① BOM(バイトオーダーマーク)
* UTF-8などのテキストの先頭に入る「目印」
* 表示されないけどデータとしては存在する
例:
* 3バイト → UTF-8のBOM(EF BB BF)
* メモ帳では普通見えない
👉 **3バイトの正体はほぼコレ**
#### ② 改行コードだけ
* LF(`\n`)→ 1バイト
* CR+LF(`\r\n`)→ 2バイト
👉 「空に見えるけど改行だけある」
#### ③ NULL文字や制御文字
* `0x00`(NULL)とか
* 表示されない特殊文字
👉 1バイトなのに何も見えないパターン
### ■ 確認方法(確実)
#### 方法①:PowerShell
```powershell
Format-Hex abc.txt
```
これで中身の正体が丸見えになります
# ==============================
やってみる

なるほど・・・

じゃあじゃあ

からっぽ ふぁいる 強制移動

すくりぷと


改造してくれ!
# ==============================
【chatGPT】様
いいですね、その方向ならかなり“事故りにくい”仕上がりにできます 👍
余計な拡張子も排除して、**テキストだけ厳密に判定**する版を丸ごと出します。
そのままコピペOKです👇
```python

import os
import shutil

# =========================
# 設定
# =========================

# 「テキストとして扱う拡張子」だけに限定
TEXT_EXTENSIONS = {
    '.txt', '.csv', '.tsv', '.log',
    '.ini', '.cfg', '.json', '.xml',
    '.html', '.htm'
}

# 空とみなすバイト
INVISIBLE_BYTES = {0x00, 0x1A, 0x0A, 0x0D}  # NULL / EOF / LF / CR

# =========================
# 判定ロジック
# =========================

def is_effectively_empty_text(file_path):
    """見えない文字だけなら空とみなす(安全版)"""
    try:
        size = os.path.getsize(file_path)

        # 完全に空
        if size == 0:
            return True

        # 念のためサイズ制限(巨大ファイル事故防止)
        if size > 1024 * 1024:  # 1MB以上は対象外
            return False

        with open(file_path, 'rb') as f:
            data = f.read()

        # UTF-8 BOMのみ
        if data == b'\xEF\xBB\xBF':
            return True

        # すべて不可視文字なら空扱い
        for b in data:
            if b not in INVISIBLE_BYTES:
                return False

        return True

    except Exception as e:
        print(f"[ERROR] 判定失敗: {file_path} ({e})")
        return False


# =========================
# ファイル移動
# =========================

def move_file_safe(src_file, dest_folder):
    """安全にリネームしながら移動"""
    os.makedirs(dest_folder, exist_ok=True)

    base_name = os.path.basename(src_file)
    dest_file = os.path.join(dest_folder, base_name)

    if not os.path.exists(dest_file):
        shutil.move(src_file, dest_file)
        print(f"[MOVE] {src_file} -> {dest_file}")
        return

    # 重複時リネーム
    name, ext = os.path.splitext(base_name)
    count = 1

    while True:
        new_name = f"{name}_{count}{ext}"
        new_path = os.path.join(dest_folder, new_name)

        if not os.path.exists(new_path):
            shutil.move(src_file, new_path)
            print(f"[MOVE] {src_file} -> {new_path}")
            return

        count += 1


# =========================
# メイン処理
# =========================

def process_files(src_folder, dest_folder):
    """安全版:拡張子なし + 空テキストのみ移動"""
    for root, dirs, files in os.walk(src_folder):
        for file in files:
            file_path = os.path.join(root, file)
            _, ext = os.path.splitext(file)

            ext = ext.lower()

            # (1) 拡張子なし → 無条件移動
            if ext == '':
                move_file_safe(file_path, dest_folder)
                continue

            # (2) テキストだけ対象
            if ext in TEXT_EXTENSIONS:
                if is_effectively_empty_text(file_path):
                    move_file_safe(file_path, dest_folder)


# =========================
# 実行
# =========================

if __name__ == "__main__":
    SRC_FOLDER = r"E:\__WORK"
    DEST_FOLDER = r"E:\__WORK-MOVE-ZERO"

    process_files(SRC_FOLDER, DEST_FOLDER)

    print("=== 完了 ===")
```

## ■ この版のポイント(重要)
👉 かなり安全寄りにしてあります
### ✔ テキストだけ判定
* `.jpg`, `.bmp` → **完全除外**
* もう巻き込まない

### ✔ 見えないゴミは空扱い

* `0x1A`(今回のやつ)OK
* 改行だけOK
* BOMだけOK

### ✔ 巨大ファイル防御
```python
if size > 1MB → 判定しない
```

👉 誤爆防止

### ✔ リネーム安全
* `file.txt`
  → `file_1.txt`, `file_2.txt`

## ■ もしさらに詰めるなら
* 「ログだけ対象にしたい」
* 「特定フォルダ除外したい」
* 「削除 instead of 移動」

全部いけます 👍
これでたぶん
👉 **“空っぽ風ファイル掃除”は完成形に近い**
動かしてみて、変な動きあればそこピンポイントで潰しましょう 😄
# ==============================

めでたしめでたし

 

じじぃ~