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. 生产者与消费者 代码实现 java

    首先,我利用忙测试写出了第一次版本的代码 package How; //自写代码 缺陷 无法完全实现pv操作线程处于忙测试状态 public class bin_1_1 { public static ...

  2. 英语口语练习系列-C32-建筑-述说时间-暮秋独游曲江

    词汇-building(建筑) entertainment Olympic-sized swimming pool tennis court basketball field football pit ...

  3. .net异常处理

    很多情况下,我们通过开发的winform程序会crash掉,此问题大部分是因为有部分异常没有捕获处理导致的.我们可以通过注册下面两个异常处理,来捕获这些异常,并做特殊处理. Application.T ...

  4. mysql三表查询sql语句

    表结构: Student学生表(学号.姓名.性别.年龄.编辑) Course课程表(编号.课程名称) sc选课表(选课编号.学号.课程编号.成绩) (1)写一个SQL语句,查询选修了“计算机原理”的学 ...

  5. java基础知识总结--继承和接口

    什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...

  6. Ajax实现局部数据交互的一个简单实例

    想要实现的功能:利用Ajax技术通过点击一个<button>按钮,然后在指定的文本框中输出想要的值. 1.使用Jsp创建一个前端页面. <body> <div style ...

  7. flask内容学习之蓝图以及单元测试

    蓝图的概念: 简单来说,蓝图是一个存储操作方法的容器.这些操作在这个蓝图被注册到一个应用之后就可以被调用.Flask可以通过蓝图来制止URL以及处理请求.Flask使用蓝图来让应用实现模块化,在Fla ...

  8. JS_高程3.基本概念(2)

    1.ECMAScript数据类型 5种简单数据类型,分别是: Undefined Null Boolean Number String 1种复杂数据类型: Object (1)typeof操作符——检 ...

  9. 前端工程化系列[04]-Grunt构建工具的使用进阶

    在前端工程化系列[02]-Grunt构建工具的基本使用和前端工程化系列[03]-Grunt构建工具的运转机制这两篇文章中,我们对Grunt以及Grunt插件的使用已经有了初步的认识,并探讨了Grunt ...

  10. android应用程序中获取view的位置

    我们重点在获取view的y坐标,你懂的... 依次介绍以下四个方法: 1.getLocationInWindow int[] position = new int[2]; textview.getLo ...