Python フォルダ内再帰検索 ファイル入出力 文字列型日付の比較方法 サンプル

■今回やりたかった事

フォルダ内にある複数のログファイルを参照して、

ログの最終出力日時が〇月〇日以降のファイル名をリスト化する

 

■ソース
import glob     #フォルダパス取得用ライブラリ
import os       #テキスト操作用ライブラリ
import datetime #日付時刻チェック用ライブラリ

 

print('start')

 

#取込対象フォルダ指定
files = glob.glob(r'C:/Users/tera_log/Desktop/tmp_folder/*.tsv', recursive=True)

#結果出力ファイル名指定 

output_file_name = r'C:/Users/tera_log/Desktop/tmp_folder/target_file_name.txt'

 

#出力ファイル初期化 ※必須ではない処理
f = open(output_file_name, 'w')
f.close()

 

#指定したフォルダ内のファイルパス分ループ
for file_path in files:
    #対象ファイルを開き、全行読み込む
    tmp_file = open(file_path)
    tmp_lines = tmp_file.readlines()
    tmp_file.close()

 

    #行分ループして日付最大値を取得
    max_date = datetime.date(2000,1,1)
    for line in tmp_lines:
        #日付を取得 ※日付の出力形式は「2000-01-01」
        file_date = datetime.date(int(line[0:4]),int(line[5:7]),int(line[8:10]))

        if max_date < file_date:
            max_date = file_date
    
    #最大値と対象日付を比較し、日付が2021-01-01以降ならならファイル名をテキストファイルに出力する    
    target_date = datetime.date(2021,1,1)
    if max_date >= target_date:
        print(os.path.basename(file_path) + '\t' + str(max_date))
        #outputファイルを開く
        f = open(output_file_name, 'a')
        f.write(os.path.basename(file_path) + '\t' + str(max_date) + "\n")
        f.close()
 

print('end')

 

■注意点

Windowsのフォルダパス指定方法>

・¥(バックスラッシュ)だとエスケープ処理される

・/(スラッシュ)は普通に使えるので、スラッシュが便利

・シングルクォートの前にrを付けると、特殊文字も文字として扱う(raw文字列)

例)r'C:/Users/tera_log/Desktop/tmp_folder/*.tsv'

 

<文字列を切り取る部分>

 ・文字列型変数に『[α:β]』を付けるとαからβまでを切り取りできる

  α:開始位置 ※0始まり

  β:終了位置 ※0始まりでカウントした文字数プラス1する

例)最初の4文字を取得したい場合は[0:4]を指定する

※日付の出力形式は「2000-01-01」

tmp_string = '2000-01-01'

print(tmp_string[0:4])

>>>2000