アメグラ2号のブログ

1980年代後半の古き良きビデオゲームのほか、オッサンの個人的備忘録

python ファイルの移動

f:id:game-allergy:20210331143049p:plain

以前に気象情報をグラフ、画像化してフォルダに保存するところまで実行したが、フォルダ内に画像ファイルがどんどこ溜まっていってしまう。

適宜削除する必要があるので、フォルダ内のファイルを移動するスクリプトを作成してみる。

スクリプト(ファイルの移動)

# ===================================
# function;
# move files that created before ** days ago
# from directory
# ===================================
# ===================================
# import
# ===================================
import glob
import os
import time
import datetime
import shutil

# ===================================
# function
# ===================================
# get today
def Getdate():
    # datetime
    dtNow = datetime.date.today()
    return dtNow

# Create Flag date
def FlagDate(dtToday,beforedays):
    dtFlag = dtToday - datetime.timedelta(days=beforedays)
    return dtFlag

# see inside of directory
def Seedir(currentdir,dtFlag):
    # Check inside of directory
    files = glob.glob(currentdir  + "/fig/*.jpg")
    
    # pick up files that should be moved out
    l=[]
    l2=[]
    for f in files:
        # epoc
        dt1 = os.path.getctime(f)
        # datetime
        dt2 = datetime.date.fromtimestamp(dt1)

        # filefullpath
        filePath = os.path.abspath(f)
        
        if dt2 >= dtFlag:
            print("yes",dt2)
            l.append(filePath)

        else:
            print("no",dt2)
            l2.append(filePath)
    
    return l2
            

# move file
def fileMove(To_dir,fileList):
    for f in fileList:
        shutil.move(f, To_dir)
        print("old file was moved")


# ===================================
# ready for exe
# ===================================
# current directory
currentdir = os.getcwd()
# move out before **dats ago
beforedays = 3
# Directory name where files move to
To_dir = currentdir + '/trash'

# ===================================
# execution
# ===================================
dtToday = Getdate()
dtFlag = FlagDate(dtToday,beforedays)
fileList = Seedir(currentdir,dtFlag)
fileMove(To_dir,fileList)


溜まって不要になったファイルを削除する、、、というのが当初に目的だったけど、削除して後で見たい…とかなると困るので、とりあえず別フォルダに移動して、そのあとに全削除をすることで行こうと思う。全削除はまた後で追記予定。

意外とハマったのがdatetimeとエポックの存在。フォルダ内のファイルの作成日時を取得してみたらエポック型…一方、何日前まで・・・という日時計算はdatetime型・・・あ~、なるほどこりゃ面倒くさい。とにかくはdatetimeにして足し引き算、そして比較をして、「〇日前のファイルは」という仕分けをして処理する、それでいいや。

これで定期実行の直前、もしくは直後に組み込んでその都度フォルダ内を整理させることにしたい。
ちらかったフォルダは嫌いだ。