一、根據傳入的參數,文件所在目錄,匹配文件的正則表達式,過時天數進行刪除,這些可寫在配置文件del_file.conf。python
del_file3.py正則表達式
#!/usr/bin/env python # encoding: GBK import os import re import sys import time import datetime import logging import shutil #reload(sys) #sys.setdefaultencoding('utf-8') logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)-1d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='myapp.log', filemode='a') # logging.debug('This is debug message') # logging.info('This is info message') # logging.warning('This is warning message') def find_file(file_dir, file_re='\d{4}-\d{2}-\d{2}', expire_time=7): # print sys.getdefaultencoding() if file_re == '': logging.error('file_re is null,exit') return None #解決編碼問題 #file_dir = file_dir.decode("utf-8") #file_re = file_re.decode("utf-8") logging.info('傳入參數 :目錄 [%s],正則表達式[%s],過時天數 [%s]' % (file_dir,file_re,expire_time)) #目錄下全部文件 all_file = os.listdir(file_dir) #匹配正則的文件 reg_file_list = [] reg_str = file_re for reg_file in all_file: if re.match(reg_str,reg_file): logging.info('正則匹配到文件:[%s]' % reg_file) reg_file_list.append(reg_file) if len(reg_file_list) <= 7: logging.info('匹配文件數小於7個,不進行刪除操做!') return None #知足過時時間的文件 #當前時間 today = datetime.datetime.now() #n天 n_days = datetime.timedelta(days=int(expire_time)) #n天前日期 n_days_agos = today - n_days #n天前時間戳 n_days_agos_timestamps = time.mktime(n_days_agos.timetuple()) for date_file in reg_file_list: abs_file = os.path.join(file_dir,date_file) file_timestamp = os.path.getmtime(abs_file) if float(file_timestamp) <= float(n_days_agos_timestamps): logging.info('過時匹配到文件:[%s]' % abs_file) #print "匹配到文件:" ,abs_file #返回知足條件的文件 if os.path.isfile(abs_file): os.remove(abs_file) logging.info('刪除文件:[%s]成功' % abs_file) if os.path.isdir(abs_file): shutil.rmtree(abs_file) logging.info('刪除目錄:[%s]成功' % abs_file) def read_conf(file_path): with open(file_path,'r') as f: for line in f: line_list = line.strip().split(',') if len(line_list) != 3: logging.warning('%s 行配置不正確' % line.strip()) continue file_dir = line_list[0] file_re= line_list[1] expire_time = line_list[2] find_file(file_dir,file_re,expire_time) if __name__ == "__main__": read_conf(sys.argv[1])
del_file.confapp
C:\Users\Administrator\Desktop\Python學習\Python測試目錄,.*數據,30
2 、按期整理日期文件或文件夾,傳入參數:文件夾所在目錄,匹配文件夾的正則表達式,整理多少天的文件夾,參數可寫在配置文件dir_reg.conf。學習
move_file.py測試
#!/usr/bin/env python # encoding: GBK import os import re import sys import time import datetime import logging import shutil #reload(sys) #sys.setdefaultencoding('utf-8') logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)-1d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='D:\\move.log', filemode='a') # logging.debug('This is debug message') # logging.info('This is info message') # logging.warning('This is warning message') def find_file(file_dir, file_re='數據', expire_time=60): logging.info('傳入參數 :目錄 [%s],正則表達式[%s],過時天數 [%s]' % (file_dir,file_re,expire_time)) if not os.path.exists(file_dir): logging.info('傳入參數 :目錄 [%s]不存在' % file_dir) return None #匹配文件或目錄 #目錄下全部文件 all_file = os.listdir(file_dir) #匹配正則的文件或目錄 reg_file_list = [] reg_str = file_re for reg_file in all_file: #if os.path.isdir(reg_file): # continue if re.match(reg_str,reg_file): logging.info('正則匹配到文件:[%s]' % reg_file) reg_file_list.append(reg_file) if len(reg_file_list) < 7: logging.info('匹配文件數小於7個,不進行移動操做!') return None #知足過時時間的文件 #當前時間 today = datetime.datetime.now() #1天前時間 one_days = datetime.timedelta(days=1) one_days_agos = today - one_days #1天前時間文件夾 one_days_agos_dir = one_days_agos.strftime("%Y-%m-%d") #1天前時間戳 one_days_agos_timestamps = time.mktime(one_days_agos.timetuple()) #n天前時間 n_days = datetime.timedelta(days=int(expire_time)) n_days_agos = today - n_days #n天前時間文件夾 n_days_dir = n_days_agos.strftime("%Y-%m-%d") #n天前時間戳 n_days_agos_timestamps = time.mktime(n_days_agos.timetuple()) #新建目錄000-00-00~0000-00-00 date_dir = '%s_%s' %(n_days_dir,one_days_agos_dir) if not os.path.exists(os.path.join(file_dir,date_dir)): os.mkdir(os.path.join(file_dir,date_dir)) #移動1~n天期間的文件或目錄 for date_file in reg_file_list: abs_file = os.path.join(file_dir,date_file) file_timestamp = os.path.getctime(abs_file) if float(n_days_agos_timestamps) <= float(file_timestamp) <= float(one_days_agos_timestamps): logging.info('移動文件:[%s]' % abs_file) #print "匹配到文件:" ,abs_file #移動知足條件的文件 shutil.move(abs_file, os.path.join(file_dir,date_dir)) logging.info('移動:[%s]到[%s]成功' % (abs_file,os.path.join(file_dir,date_dir))) def read_conf(file_path): with open(file_path,'r') as f: for line in f: line_list = line.strip().split(',') if len(line_list) != 3: logging.warning('%s 行配置不正確' % line.strip()) continue file_dir = line_list[0] file_re= line_list[1] expire_time = line_list[2] find_file(file_dir,file_re,expire_time) if __name__ == "__main__": read_conf(sys.argv[1])
dir_reg.conf編碼
D:\mylog,^\d{4}-\d{2}-\d{2}$,30 D:\mylog,^\d{4}-\d{2}-\d{2}$,90