Python – Check last file date in a folder and notify if there isn’t a new one after n days

This week we had the need of monitoring a folder, specifically we need to know if after “n” days there isn’t any new file. For this reason I programmed a simple python script that sends us an email if this happen. Let’s do the example.

#! /usr/bin/python
# -*- coding: utf-8 -*-
import datetime
import glob
import os
import smtplib
import string
 
now  = datetime.datetime.today() #Get current date

list_of_files = glob.glob('c:/tmp/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime) #get latest file created in folder

newestFileCreationDate = datetime.datetime.utcfromtimestamp(os.path.getctime(latest_file)) # get creation datetime of last file

dif = (now - newestFileCreationDate) #calculating days between actual date and last creation date

logFile = "c:/tmp2/log.log" #defining a log file

def checkFolder(dif, now, logFile):
	if dif > datetime.timedelta(days = 5): #Check if difference between today and last created file is greater than 5 days
		
		HOST = "192.16.0.1" #This must be your smtp server ip
		SUBJECT = "Alert! At least 5 days wthout a new file in folder xxxxxxx"
		TO = "yourmail@yourdomain.com"
		FROM = "noreply@yourdomain.com"
		text = "%s - The oldest file in folder it's %s old " %(now, dif) 
		BODY = string.join((
			"From: %s" % FROM,
			"To: %s" % TO,
			"Subject: %s" % SUBJECT ,
			"",
			text
			), "\r\n")
		server = smtplib.SMTP(HOST)
		server.sendmail(FROM, [TO], BODY)
		server.quit()
		
		file = open(logFile,"a") #Open log file in append mode
 
		file.write("%s - [WARNING] The oldest file in folder it's %s old \n" %(now, dif)) #Write a log
 
		file.close() 
		
	else : # If difference between today and last creation file is less than 5 days
				
		file = open(logFile,"a")  #Open log file in append mode
 
		file.write("%s - [OK] The oldest file in folder it's %s old \n" %(now, dif)) #write a log
 
		file.close() 

checkFolder(dif,now,logFile) #Call function and pass 3 arguments defined before

 

Thanks for all

2 Replies to “Python – Check last file date in a folder and notify if there isn’t a new one after n days”

  1. Thanks for sharing.
    Is there a potential difference in the timezones between your ‘now’ variable and ‘newestFileCreationDate’?

    1. I’m not sure about your question, but in this case now is the time of host system, and I newestFileCreationDate reads timestamp of the last file in folder. I asume both are in the same host and of course in the same timezone

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.