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

#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
时间: 2024-12-28 22:49:25

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

定期删除IIS日志文件

服务器中由于监控的需要会经常生成很多日志文件,比如IIS日志文件(C:\inetpub\logs\LogFiles),一个稍微有流量的网站,其日志每天可以达到上百兆,这些文件日积月累会严重的占用服务器磁盘空间.有必要对他们进行定期删除.dos批处理程序如下: :: 清理IIS日志文件 :: 备份MySql数据库 @echo off title 清理IIS日志文件 :: IIS日志文件目录 set log_dir="C:\inetpub\logs\LogFiles" :: 保留日志天数

python列表删除元素整理

先看一个例子: test1 = ['a','b','c','','']for i in test1: if i == '': test1.remove(i) #删除空元素 print(test1) >>>['a', 'b', 'c', ''] 这时发现并没有达到我们想要的结果,原因分析如下: 要了解一下python列表的数据结构,列表属于连续线性表,它的连续在于有一块连续的内存储存着列表中元素的地址,如图(忽略地址与值所占的字节,只为方便举例子): 当然也可以通过一个代码来看证明一下:

使用gridlayout布局后,因某些原因又删除,并整理文件夹结构时,Unable to resolve target &amp;#39;android-7&amp;#39;

出现的问题 [2013-01-11 10:52:39 - gridlayout_v7] Unable to resolve target 'android-7' 事由:在一次做九宫格时.误使用了gridlayout布局.因此eclipse为我自己主动下载了??gridlayout_v7_2 文件,并放到工作空间文件夹. 由于不再须要,也为了文件夹结构的清晰性,须要将其删除.但在关闭(Close Project)这个文件时,eclipse自己主动编译项目出错,提示?Unable to resolv

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

使用python删除一个文件或文件夹,需要使用os模块. import osos.remove(path) # path是文件的路径,如果这个路径是一个文件夹,则会抛出OSError的错误,这时需用用rmdir()来删除os.rmdir(path) # path是文件夹路径,注意文件夹需要时空的才能被删除os.unlink('F:\新建文本文档.txt') # unlink的功能和remove一样是删除一个文件,但是删除一个删除一个正在使用的文件会报错. import os path = 'F:

python删除指定目录下的指定文件和文件夹

具体代码: #coding:utf-8import os,sys,platformclass RemoveTagFile(object): path=None def removeFile(self,path,remove_list,retain_list): #path后面要跟/ self.path=path system_test=platform.system() if(system_test=='Windows'): path_last=self.path[-1] if(path_las

python工具-文件及文件夹移动及处理

通过python对大量文件及文件夹进行整理:重组.移动.删除等. 常用函数总结如下: 1. os.path.dirname(__file__):获取py脚本所在文件夹的绝对路径: 2. os.path.abspath(file_path):获取文件的绝对路径,包括文件名 3. os.path.join(path,filename):将文件夹路径和文件路径拼接起来,注意这里的文件必须在path文件夹中,中间不能隔着其他文件夹: 4 .os.path.splitext(filename): 将文件名

PYTHON对文件及文件夹的一些操作

python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件:1) os.mknod("test.txt") 创建空文件2) open("test.txt",w)           直接打开一个文件,如果文件不存在则创建文件 创建目录:os.mkdir("file")                   创建目录 复制文件:shutil.copyfile("oldfile","newfile&

python中对文件、文件夹的操作需要涉及到os模块和shutil模块。

创建文件:1) os.mknod("test.txt") 创建空文件2) open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件 创建目录:os.mkdir("file") 创建目录 创建多层新目录:def mkdirs(path): # 去除首位空格 path=path.strip() # 去除尾部 \ 符号 path=path.rstrip("\\") # 判断路径是否存在 # 存在 True #

【菜鸟学Linux】Cron Job定期删除Log(日志)文件

以前一直做Windows开发,近期的项目中要求使用Linux.作为小菜鸟一枚,赶紧买了一本经典书<鸟哥的Linux私房菜>学习.最近刚好有一个小任务 - 由于产品产生的Log很多,而且增长很快,所以需要用脚本(Bash scripts)删除过期的Log文件. 使用Linux下的Cron Job可以很好的解决这个问题. 什么是Cron Job? 建立Cron Job需要用到命令crontab,维基百科定义:crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.