标签:sys.argv 正则表达式 filename python 条件 读取配置 ror strong etc
1、根据传入的参数,文件所在目录,匹配文件的正则表达式,过期天数进行删除,这些可写在配置文件del_file.conf。
del_file3.py
#!/usr/bin/env python
# encoding: GBK
import os
import re
import sys
import time
import datetime
import logging
#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=‘数据‘, expire_time=60):
# 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 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()
#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
#删除满足条件的文件
os.remove(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(‘D:\workspace\myPython\com\del_file.conf‘)
read_conf(sys.argv[1])
del_file.conf
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
标签:sys.argv 正则表达式 filename python 条件 读取配置 ror strong etc
原文地址:http://www.cnblogs.com/jjzd/p/7488641.html