

あるディレクトリの中から、ファイル名に「1536_496」という名称が入っている画像のみ、別のディレクトリに移動したいと考えています。  
コードを書いてみましたが、以下の通りエラーが出てしまいました。  
どうすればエラーがなくなるか、アドバイス頂けないでしょうか。

また、上記を修正しても、今のコードだと、re.searchで条件がマッチした画像だけでなく、その画像が保存されているディレクトリごと別のディレクトリへ移動してしまいそうな感じもします。。。その点につきましてもどうすれば良いかご存知の方がいらっしゃいましたらご教示頂けますと幸いです。

**エラーメッセージ**

[code]

    Error: Destination path './NORMAL_resize_rename_10000/NORMAL_resize_rename_copy_10000' already exists
    
[/code]

**実際のコード**

[code]

    import glob
    import os
    import re
    import shutil
    
    # 画像の保存名に「1536_496」が入っているものを別フォルダに移動
    
    input_dir  = './NORMAL_resize_rename_10000'       # 移動元ディレクトリ
    output_dir = './NORMAL_resize_rename_copy_10000'  # 移動先ディレクトリ
    
    # 出力ディレクトリが存在しない場合、作成する。
    os.makedirs(output_dir, exist_ok=True)
    
    for path in glob.glob(input_dir + "/*.jpeg"):
        img = Image.open(path)              # 画像を path から読み込み
        match = re.search('1536_496', path) # input_dir + "/*.jpeg"
        if match:
            move(output_dir,  input_dir)    # output_dirの該当画像をinput_dirに移動する
    
[/code]


CC BY-SA 4.0
2019-05-06T09:35:22.433
54774
2022-07-19T14:02:45.240
2019-05-06T10:53:47.513
3060
32840
question
python python3
re.searchで条件に一致したファイルを別ディレクトリに移動したい


re.searchがうまく動かなかったので、以下の通り、ディレクトリ内の画像のサイズを取得する際に書いたコードに追加をしたところ、上手くいきました。お騒がせ致しました。

[code]

    import glob
    import os
    import cv2
    import sys
    import shutil
    
    # 引数は画像のファイルパス
    # 画像を読み込み、解像度情報を返す関数
    def get_resolution(filepath):
    
        img = cv2.imread(filepath)
    
        # 画像ファイルの読み込みに失敗したらエラー終了
        if img is None:
            print("Failed to load image file.")
            sys.exit(1)
    
        # カラーとグレースケールで場合分け
        if len(img.shape) == 3:
            height, width, channels = img.shape[:3]
        else:
            height, width = img.shape[:2]
            channels = 1
    
        return width,height,channels
    
    # 引数はディレクトリ
    # ディレクトリ内のファイルの解像度をカウントする
    def count_resol(directory):
        print(directory)
        files = glob.glob(directory)
        mov_dir = './NORMAL_resize_copy_100_1_0506' # 追加
        os.makedirs(mov_dir, exist_ok=True)# 追加
        d={}
        for file in files:
            width,height,channels = get_resolution(file)
            info = str(width) + "," + str(height) + "," +str(channels)
            d.setdefault(info,0)
            d[info] += 1
            if str(width) ==1536 and str(height) == 496:# 追加
                shutil.copy(file,  './NORMAL_resize_copy_100_1_0506/' )# 追加
    
        print(d)
    
[/code]


CC BY-SA 4.0
2019-05-06T13:19:57.667
54779
2019-05-06T13:19:57.667
32840
54774
answer