@Papapapapaython

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonランダムリネーム奇数偶数

解決したいこと

macbookで画像ファイル名を名前順番の昇順に設定しているとして
奇数番目はランダム奇数にリネーム、
奇数番目の次のファイルは奇数番目でリネームされた数値+1
した結果でリネームしたい

例)
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png

リネーム後 例)
103.png
104.png
267.png
268.png
479.png
480.png
555.png
556.png
713.png
714.png

発生している問題・エラー

windowsではリネーム結果が理想通りだが
macbookで実行するとファイルが消えたり、
リネーム結果が最初の奇数、偶数のペアを保持せずバラバラになったりする。

該当するソースコード

python

実行したコード

import os
import random

def rename_odd_files(directory):
    # ディレクトリ内のファイル一覧を取得
    files = os.listdir(directory)
    
    # ファイルを名前でソート
    files.sort()

    # 奇数番目のファイルに対して処理を行う
    for i in range(0, len(files), 2):
        old_name = files[i]
        old_path = os.path.join(directory, old_name)

        # ファイルの拡張子を取得
        _, extension = os.path.splitext(old_name)

        # 新しいランダムな奇数の名前を生成
        new_name = str(random.randint(1, 1000))

        # 確認して奇数になるように調整
        if int(new_name) % 2 == 0:
            new_name = str(int(new_name) + 1)

        new_path = os.path.join(directory, new_name + extension)

        # ファイルをリネーム
        os.rename(old_path, new_path)

        # 同時に次のファイルも+1してリネーム
        if i + 1 < len(files):
            next_old_name = files[i + 1]
            next_old_path = os.path.join(directory, next_old_name)

            # 拡張子を取得
            _, next_extension = os.path.splitext(next_old_name)

            # 新しい名前を生成し、+1する
            next_new_name = str(int(new_name) + 1)
            next_new_path = os.path.join(directory, next_new_name + 
next_extension)

            # ファイルをリネーム
            os.rename(next_old_path, next_new_path)

if __name__ == "__main__":
    # ディレクトリのパスを指定
    target_directory = "/Users/shi/Documents/1"

    # ファイルをリネーム
    rename_odd_files(target_directory)

自分で試したこと

windowsではリネーム結果が理想通りだが
macbookで実行するとファイルが消えたり、
リネーム結果が最初の奇数、偶数のペアを保持せずバラバラになったりする。
0 likes

2Answer

Comments

  1. リネームで新たに付ける数字を乱数で取得しているため、
    すでに存在する数字となったときに、想定外の動きになっているように思います。
    これは、偶然(乱数)によるので、Windows / Mac は関係なと思います。

windowsではリネーム結果が理想通りだが
macbookで実行するとファイルが消えたり、
リネーム結果が最初の奇数、偶数のペアを保持せずバラバラになったりする。

・名前が重複している場合の処理が抜けているように思います。
・OSの違いを疑っている件については乱数シードを固定して再現性確認を行いましたか?

1Like

Your answer might help someone💌