ファイルのタイムスタンプ(作成日付など)

投稿者: | 2022-12-25

目次

タイムスタンプの取得

  • いずれでも取得可能
  • エポック秒で取得されるため、datetime形式に変換する
  • datetime型とdate型は違う。そのままでは比較できないので注意。
  • atime: 最終アクセス日時
  • mtime: 最終内容更新日時
  • ctime: メタデータの最終更新日時(UNIX) / 作成日時(Windows)
  • birthtime: 作成日時(macOSを含むFreeBSD系の一部のUNIXのみ)

ある期間に「作成された」ファイルを探す(GUI)

import pathlib
import datetime
from datetime import date, datetime, timedelta
import PySimpleGUI as sg
import sys

def get_date_gui():
    """GUIから日付を取得.
    
    Parameters
    ----------------------------


    Returns
    ----------------------------
    tg_date:    date
    """
    try:
        date_tuple = sg.popup_get_date()
        m, d, y = date_tuple[0], date_tuple[1], date_tuple[2]
        tg_date = date(y, m, d)
        return tg_date
    except Exception as ex:
        sg.popup('処理を中断します')
        print(ex)
        sys.exit()


# GUI利用のため未使用
# def get_date(yyyymmdd:str):
#     """yyyymmddからdatetime.dateを取得.

#     Paramaters
#     ------------------------------
#     yyyymmdd:   str

#     Returns
#     ------------------------------
#     tg_date:    date型(Not datetime型)
#     """
#     try:
#         year, month, day = yyyymmdd[:4], yyyymmdd[4:6], yyyymmdd[6:9]
#         tg_date = date(int(year), int(month), int(day))
#         return tg_date
#     except Exception as ex:
#         print(ex)
#         sys.exit()


def get_ctime_date(f_p: 'pathlib.Path object'):
    """ファイルパス(pathlibOBJ)からファイル作成日時を取得.

    Paramaters
    ------------------------------
    f_p:            str
                    pathlib.Path OBJ

    Returns
    ------------------------------
    ctime_date:     date型(Not datetime型)   
    """
    ctime_epoc = f_p.stat().st_ctime
    ctime_dt = datetime.fromtimestamp(ctime_epoc)
    ctime_date = ctime_dt.date()
    return ctime_date


def get_files(dir_p:str):
    """指定フォルダからファイルリストを取得"""
    try:
        if pathlib.Path(dir_p).exists:
            file_list = list(pathlib.Path(dir_p).glob('./*.*'))
            print(f'ファイルの総数:{len(file_list)}')
            return file_list
    except Exception as ex:
        print('パスが違います')
        sys.exit()
    else:
        print('パスが存在しません')
        sys.exit()

def get_target_file_list(dir_p:str, start, end):
    """指定した日付の条件に合致するファイルリストを取得.
    
    Paramaters
    ------------------------------
    dir_p:      str
                指定フォルダのパス(文字列)

    start:      date
                開始日付(date型)

    end:        date
                終了日付(date型)

    Returns
    ------------------------------
    target:     list
                条件に合致するファイルパス(PathlibOBJ)のリスト
    """

    file_list = get_files(dir_p)

    if len(file_list) == 0:
        sg.popup('終了します:ファイルがありません')
        sys.exit()

    target = []
    for f in file_list:
        ctime_date = get_ctime_date(f)  
        if (start <= ctime_date <= end):
            target.append(f)
        else:
            print('処理中断')
            sys.exit()

    return target


def main():
    f_p = sg.popup_get_folder('フォルダを指定してください(str)?')
    start = get_date_gui()
    end = get_date_gui()
    get_target_file_list(f_p, start, end)


if __name__ == '__main__':
    print(main())