Python フォルダを新規作成してファイル移動

Pythonフォルダを新規作成してファイル移動 Python
<開発環境>
Windows10 home 64bit
Python 3.10.9
selenium 3.141.0

前回、作成してあるフォルダAからフォルダBへ移動する方法を説明させていただきました。

今回は移動先のフォルダを新規作成してそこにファイル移動する方法を説明していきます。

もう少し条件をつけるため移動するフォルダが移動先にある場合は移動しないという処理も書いていきます。

import os
import glob
import shutil
import pathlib
import datetime as dt

#移動元と移動先のフォルダを定義する。
folder_a = "C:\\ユーザー名\\フォルダ名\\Python\\FILE\\フォルダA\\"
#移動先のフォルダを新規作成
dt_now = dt.datetime.now()
yyyymm = dt_now.strftime('%Y%m%d')

directory_name = yyyymm + '_backup'

folder_b = folder_a + "\\" + directory_name

if(not (os.path.exists(folder_b))):
    
    #フォルダ作成
    os.mkdir(folder_b)
    # フォルダ内のファイルをリスト化する
    list1 = os.listdir(folder_a)
    # XLSファイルだけをリスト化する
    list_txt = [s for s in list1 if ((".txt") in s)]

    # 移動、コピー処理されたかを知る為のフラグ
    processsignal = 0

    for i in range(len(list_txt)):
        file_a = os.path.join(folder_a, list_txt[i])
        file_b = os.path.join(folder_b, list_txt[i])
    # 移動先に同じファイルがあるかを確認する。
        if os.path.isfile(file_b):
            time_a = pathlib.Path(file_a).stat().st_mtime
            time_b = pathlib.Path(file_b).stat().st_mtime

            if(time_a > time_b):
                shutil.copyfile(file_a, file_b)
                print(list_txt[i] + "が上書きされました")
                processsignal = 1
    # 移動先にファイルがなければ、そのまま移動する
        else:
            shutil.move(file_a, folder_b)
            print(list_txt[i] + "が移動されました")
            processsignal = 1

    # 処理が行われない場合もコメントする
    if(processsignal == 0):
        print("コピー、更新するファイルはありませんでした")
else:    
    print("すでにフォルダがあるので処理を中断します")

フォルダAの中に実行した日付_backupを作成してそこにtxtファイルを移動させていきます。

すでに日付_backupフォルダが存在する場合は処理中断します。

#移動先のフォルダを新規作成
dt_now = dt.datetime.now() #今日の日付を取得
yyyymm = dt_now.strftime('%Y%m%d') #日付を文字列に変換

directory_name = yyyymm + '_backup' #backupを好きなフォルダ名にしてもらっても大丈夫です

folder_b = folder_a + "\\" + directory_name

これでフォルダAに日付_backupのフォルダが作成されました。

続けてファイル移動の際に同じファイルがあるか確認しながら移動していきます。

    # 移動先に同じファイルがあるかを確認する。
        if os.path.isfile(file_b):
            time_a = pathlib.Path(file_a).stat().st_mtime #タイムスタンプを取得
            time_b = pathlib.Path(file_b).stat().st_mtime

            if(time_a > time_b):
                shutil.copyfile(file_a, file_b)
                print(list_txt[i] + "が上書きされました")
                processsignal = 1
    # 移動先にファイルがなければ、そのまま移動する
        else:
            shutil.move(file_a, folder_b)
            print(list_txt[i] + "が移動されました")
            processsignal = 1

成功すれば先程作成されたフォルダにtxtファイルが移動されます。

今回のサンプルは1日1回実行することを目的として作っているので1日数回実行したい場合はフォルダの有り無しのチェック部分など改善する必要あります。

単純にコピーして汎用性のあるコードではないのでポイントを見てもらって参考してもらえばと思います。

コメント

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