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