Python定期删除文件、整理文件夹
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定期删除文件、整理文件夹的更多相关文章
- 定期删除IIS日志文件
服务器中由于监控的需要会经常生成很多日志文件,比如IIS日志文件(C:\inetpub\logs\LogFiles),一个稍微有流量的网站,其日志每天可以达到上百兆,这些文件日积月累会严重的占用服务器 ...
- Linux创建一个周期任务来定期删除过期的文件
一:需求 在开发中存在这样的情况,为了防止文件的误删,不允许开发人员直接删除项目中要用到的文件,而是将它们移动到某个目录,然后由一个周期任务去检测并删除内部过期的文件: 二:检测文件是否是过期文件 有 ...
- shell定期转移日志文件到云盘并定期删除云盘文件
shell 脚本定期处理如下: cat /home/backup/logs_delete.sh #!/bin/bash /bin/find /data/logs/nginx/ -name " ...
- python删除文件和文件夹
python中删除文件:os.remove(path) path为文件的路径 import os os.remove(path) python中删除文件夹:shutil.rmtree(path) pa ...
- 使用python删除一个文件或文件夹
使用python删除一个文件或文件夹,需要使用os模块. import osos.remove(path) # path是文件的路径,如果这个路径是一个文件夹,则会抛出OSError的错误,这时需用用 ...
- 【转】 python 删除非空文件夹
转自:https://blog.csdn.net/xiaodongxiexie/article/details/77155864 一般删除文件时使用os库,然后利用os.remove(path)即可完 ...
- Python学习笔记(20)-文件和文件夹的移动、复制、删除、重命名
一,概述 python中对文件和文件夹进行移动.复制.删除.重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动.复制.删除.重命名, ...
- Python 删除文件与文件夹
版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...
- 如何使用python移除/删除非空文件夹?
移除/删除非空文件夹/目录的最有效方法是什么? 1.标准库参考:shutil.rmtree. 根据设计,rmtree在包含只读文件的文件夹树上失败.如果要删除文件夹,不管它是否包含只读文件,请使用 i ...
随机推荐
- xml模块、项目开发过程
一.XML模块 xml指的是可扩展标记语言,是一种定义电子文档结构和描述的语言,可以用来标记数据.定义数据类型. 什么时候用xml? 当需要自定义文档结构时,使用xml.在java中经常会使用xml来 ...
- Redis自学笔记:3.3入门-散列类型
3.3散列类型 3.3.1介绍 散列类型不能嵌套其他数据类型,一个散列类型可以包含至多232-1个字段 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的数据, 而字段值则存储属性值 ...
- 【整理】Java 10新特性总结
Java 9才发布几个月,很多玩意都没整明白,Java 10就来了..这时候我真尼玛想说:线上用的JDK 7 ,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10……刚学Java的 ...
- 潭州课堂25班:Ph201805201 django框架 第十二课 自定义中间件,上下文处理,admin后台 (课堂笔记)
中间件 在项目主目录下的配置文件 在项目主目录下创建文件 写个自定义异常处理 方法1 要让其生效,要在主目录下,的中间件中进行注册 主目录下.该文件名.类名 在进入视图函数之前进行判断, 给 req ...
- python正则表达式(四)
re模块的高级用法 search 需求:匹配出文章阅读的次数 #coding=utf-8 import re ret = re.search(r"\d+", "阅读次数为 ...
- GetLastError
GetLastError返回错误表[0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [6]-句 ...
- Mac redis入门
Mac redis入门 一.Redis简介 Redis是开源的key-value数据库,运行在内存中,但可以把数据持久化存到磁盘.Redis具有极高的性能,也为各种语言提供了丰富的接口,因此有着广泛的 ...
- Mac下hadoop运行word count的坑
Mac下hadoop运行word count的坑 Word count体现了Map Reduce的经典思想,是分布式计算中中的hello world.然而博主很幸运地遇到了Mac下特有的问题Mkdir ...
- 删除office拥有多个都需要激活的授权信息
首先确认office目录下存在“ospp.vbs”文件,可以搜索确认文件路径. 我的是在C:\Program Files\Microsoft Office\Office16 然后以管理员身份打开cm ...
- JS膏集01
JS膏集01 1.动态页面: 向服务器发送请求,服务器那边没有页面,动态生成后,返回给客户端 由html/css/js组成. js还不是面向对象的语言,是基于对象的语言.js中没有类的概念,js的继承 ...