所定のディレクトリ内のファイル名の一覧を取得し、前回取得した内容と比較し新しいファイルがある場合通知するスクリプトです。
linuxのcronやwindowsのタスクスケジューラなどで定期的に実行することを想定しています。
通知方法をとりあえずコンソールにテキストを出力していますが、この辺りをメールを送信したりログに出力したりするようにすると実用的になるかと思います。
# coding: utf8
# 配列を比較し要素の追加がある場合通知
import os
import glob
from pathlib import Path
path = ".\list.txt" # 配列ファイル
target_dir = ".\data" # 監視対象ディレクトリ
# 変更前配列ファイルの存在確認
if (not(os.path.isfile(path))):
# ファイルが存在しない
Path(path).touch() # ファイルを新規作成
old_list = [] # 配列の初期化
else:
# ファイルの読み込み
with open(path) as f:
old_list = [s.strip() for s in f.readlines()] # 配列に格納
# 最新配列を初期化
new_list = []
# 最新の配列を取得
[new_list.append(p) for p in glob.glob("{0}\*".format(target_dir))
if os.path.isfile(p)]
# 配列の要素を一つ一つ確認
for e in new_list:
if (not(e in old_list)):
# 新しい要素の発見
print(e) # 発見の通知
with open(path, 'a') as f: # ファイルに追記
print(e, file=f)
これぐらいのスクリプトはどんなプログラミング言語でもサラサラ書ける用になりたいですが、なかなか学習が進んでいないのが現状です。
配列の初期化、追加、同一要素の確認、ファイルの存在確認、テキストファイルの読み書きなど、個人的に良く使う基本事項がおさえられたと思います。
ブロックを:とインデントで表現する部分は慣れたのですが、[]内にforを書く表記など、まだまだ見なれるものがちらほら出てきます。この表記はfor文を一行まとめられるので、ネストが深くなりすぎるのを防止できそうな半面、あまり複雑な処理を記述しようとすると難読なコードになりそうです。
以上
コメント