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
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.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

Python定期删除文件、整理文件夹的更多相关文章

  1. 定期删除IIS日志文件

    服务器中由于监控的需要会经常生成很多日志文件,比如IIS日志文件(C:\inetpub\logs\LogFiles),一个稍微有流量的网站,其日志每天可以达到上百兆,这些文件日积月累会严重的占用服务器 ...

  2. Linux创建一个周期任务来定期删除过期的文件

    一:需求 在开发中存在这样的情况,为了防止文件的误删,不允许开发人员直接删除项目中要用到的文件,而是将它们移动到某个目录,然后由一个周期任务去检测并删除内部过期的文件: 二:检测文件是否是过期文件 有 ...

  3. shell定期转移日志文件到云盘并定期删除云盘文件

    shell 脚本定期处理如下: cat /home/backup/logs_delete.sh #!/bin/bash /bin/find /data/logs/nginx/ -name " ...

  4. python删除文件和文件夹

    python中删除文件:os.remove(path) path为文件的路径 import os os.remove(path) python中删除文件夹:shutil.rmtree(path) pa ...

  5. 使用python删除一个文件或文件夹

    使用python删除一个文件或文件夹,需要使用os模块. import osos.remove(path) # path是文件的路径,如果这个路径是一个文件夹,则会抛出OSError的错误,这时需用用 ...

  6. 【转】 python 删除非空文件夹

    转自:https://blog.csdn.net/xiaodongxiexie/article/details/77155864 一般删除文件时使用os库,然后利用os.remove(path)即可完 ...

  7. Python学习笔记(20)-文件和文件夹的移动、复制、删除、重命名

    一,概述 python中对文件和文件夹进行移动.复制.删除.重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动.复制.删除.重命名, ...

  8. Python 删除文件与文件夹

    版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...

  9. 如何使用python移除/删除非空文件夹?

    移除/删除非空文件夹/目录的最有效方法是什么? 1.标准库参考:shutil.rmtree. 根据设计,rmtree在包含只读文件的文件夹树上失败.如果要删除文件夹,不管它是否包含只读文件,请使用 i ...

随机推荐

  1. SpringBoot应用War包形式部署到外部Tomcat

    这一篇文章介绍SpringBoot应用修改默认打jar形式部署为打war包形式,部署到外部Tomcat. SpringBoot应用默认打包成为可执行jar模式让我们感觉到部署的便捷,接下来给大家介绍一 ...

  2. ISP PIPLINE(零) 知识综述预热

    本文为camera isp pipline概述 ISP,即image signal processing.为图像成型做的处理工作.适应不同光学环境下图像的还原. pipline流程如下: 光通过LEN ...

  3. 2018-6-8随笔-combox绑定-语音-删空格

    1.下面介绍三种对comboBox绑定的方式,分别是泛型中IList和Dictionary,还有数据集DataTable ----->>>>>飞机票 2. 简单的语音播报 ...

  4. Codeforces.1096E.The Top Scorer(组合)

    题目链接 感觉这题很裸啊,除了看着恶心点也没什么了,怎么过的人那么少.. \(Description\) 给定\(n,r,s\),表示有\(n\)个人,设每个人的得分是非负整数\(a_i\),已知第一 ...

  5. node+express跨域处理

  6. IDEA2018.2.2 版本配置注释模板

    Ctrl+Alt+S进入设置界面(我没改过按键映射,你也可以从File-OtherSetting进入设置),找到Editor->File and Code Templates,先在Include ...

  7. 2017.07.14【NOIP提高组】模拟赛B组

    Summary 这次比赛因为迟到了,少了很多时间,也受到了相应的惩罚,这是好的,是个标记牌,警醒着我.这次比赛的题目很难,也就是说,大家的得分都很低,总的来说,收获还是很大的,因为有非常多的技巧被掌握 ...

  8. javaweb笔记

    (1)web项目需复制web.xml文件 (2)需要复制classes文件 需要把bin里面的com----复制到classes中

  9. python测试开发django-55.xadmin使用markdown文档编辑器(django-mdeditor)

    前言 markdown是一个非常好的编辑器,用过的都说好,如果搭建一个博客平台的话,需要在后台做文章编辑,可以整合一个markdown的文本编辑器. github上关于django的markdown插 ...

  10. x264阅读记录-1

    x264阅读记录-1 采用x264版本是x264-snapshot-20060316-2245. 1. main函数 x264的main函数位于x264.c中,下面是main函数调用情况: (1)_s ...