用Python删除本地目录下某一时间点之前创建的所有文件的实例

因为工作原因,需要定期清理某个文件夹下面创建时间超过1年的所有文件,所以今天集中学习了一下Python对于本地文件及文件夹的操作。网上 这篇文章 简明扼要地整理出最常见的os方法,抄袭如下:

os.listdir(dirname):列出dirname下的目录和文件
os.getcwd():获得当前工作目录
os.curdir:返回当前目录('.')
os.chdir(dirname):改变工作目录到dirname
os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false
os.path.isfile(name):判断name是不是一个文件,不存在name也返回false
os.path.exists(name):判断是否存在文件或目录name
os.path.getsize(name):获得文件大小,如果name是目录返回0L
os.path.abspath(name):获得绝对路径
os.path.normpath(path):规范path字符串形式
os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext():分离文件名与扩展名
os.path.join(path,name):连接目录与文件名或目录
os.path.basename(path):返回文件名
os.path.dirname(path):返回文件路径
os.remove(dir) #dir为要删除的文件夹或者文件路径
os.rmdir(path) #path要删除的目录的路径。需要说明的是,使用os.rmdir删除的目录必须为空目录,否则函数出错。
os.path.getmtime(name) #获取文件的修改时间
os.stat(path).st_mtime#获取文件的修改时间
os.stat(path).st_ctime #获取文件修改时间
os.path.getctime(name)#获取文件的创建时间

于是我照着这些方法,费半天劲,终于写出了“清理某路径下所有文件及文件夹”的方法,代码如下:

import os
dirToBeEmptied = 'D:\_Data\Python\os' #需要清空的文件夹
ds = list(os.walk(dirToBeEmptied)) #获得所有文件夹的信息列表
dsr = ds[::-1] #反转该列表,从最底层的文件夹开始清算
for d in dsr: #遍历该列表
 print(d) #打印出列表项,观察规律
 if d[2] != []: #如果该路径下有文件
  for x in d[2]: #先将文件清理干净
   os.remove(os.path.join(d[0], x))
for d in dsr: #再次遍历该列表
 if d[1] != []: #如果该路径下有子文件夹
  for y in d[1]: #将子文件夹清理干净
   os.rmdir(os.path.join(d[0], y))

之所以这么麻烦,是因为 os.rmdir() 有个毛病,只能删除“空”文件夹。所以只能从最底层的文件夹开始清理,一级一级往上,才能清干净。

后来想想,应该有更简便的方法,因为清空文件夹是很常见的动作。查了Python官方文档,发现了os以外的另一个模块:shutil(高级文件操作),竟然有 shutil.rmtree() 的方法,不仅是清空,直接连文件夹都一起删掉,太凶残了!

为了“仅仅清空”,我搭配使用 shutil 模块重写了代码:

import shutil, os
os.chdir('d:\_data\python\os') #进入要清空的目录
ds = list(os.listdir()) #获得该目录下所有文件或文件夹列表
for d in ds: #遍历该列表
 if os.path.isfile(d): #如果列表项是文件
  os.remove(d) #直接删除
 else: #如果不是文件,肯定是文件夹
  shutil.rmtree(d) #也直接删除

这下可就简洁多了。

不过,清空一时爽,但已经偏离我原来的目的了:我只是想删除过期的文件,但文件夹和所有子文件夹都得留着啊。倒也不难,最开始的代码中,第1次遍历列表就是只删文件、不删文件夹。只要再加个判断语句,判断出文件是否过期,就能达到目的了。

我要删除的文件,实际上是做镜像备份时,将已从主机删除或更改的文件暂时保存下来,以备恢复之用。这些文件久了会越来越占空间,因此设定为1年过期。这些文件有一个特点,就是只会被复制过来一次,且不会有任何修改,因此只需要判断其创建日期就可以。

想着是容易,但万万没想到,Python对时间的处理这么复杂!涉及到两个模块:datetime 和 time。有时间必须重头系统学习一下,但这里,我只关心现在需要的几个方法:

datetime.datetime.now() #获取当前时间,返回值的格式类似 datetime.datetime(2017, 12, 14, 1, 29, 24, 406538)

datetime.timedelta() #设定两个时间之间的间隔,用于时间计算,可以设置的单位包括:(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0),默认都为0

os.path.getctime() #获取文件的创建时间,返回值的格式为一个巨大的浮点数,为1970年1月1日到这个创建时间所历经的秒数

datetime.datetime.fromtimestamp() #将os.path.getctime() 转换为跟datetime.datetime.now()一样的格式,以进行比较计算

弄清楚上面这些乱七八糟的之后,就可以写代码了:

import os, datetime
dirToBeEmptied = 'D:\_Data\Python\os' #需要清空的文件夹
ds = list(os.walk(dirToBeEmptied)) #获得所有文件夹的信息列表
delta = datetime.timedelta(days=365) #设定365天前的文件为过期
now = datetime.datetime.now() #获取当前时间
for d in ds: #遍历该列表
 os.chdir(d[0]) #进入本级路径,防止找不到文件而报错
 if d[2] != []: #如果该路径下有文件
  for x in d[2]: #遍历这些文件
   ctime = datetime.datetime.fromtimestamp(os.path.getctime(x)) #获取文件创建时间
   if ctime < (now-delta): #若创建于delta天前
    os.remove(x) #则删掉

呼~~~~~~~~~

真够复杂的!不知道有没有简便一点的办法……

以上这篇用Python删除本地目录下某一时间点之前创建的所有文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • python实现删除文件与目录的方法
  • python创建和删除目录的方法
  • Python简单删除目录下文件以及文件夹的方法
  • python删除特定文件的方法
  • python 实现删除文件或文件夹实例详解
(0)

相关推荐

  • Python简单删除目录下文件以及文件夹的方法

    本文实例讲述了Python简单删除目录下文件以及文件夹的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python import os import shutil filelist=[] rootdir="/home/zoer/aaa" filelist=os.listdir(rootdir) for f in filelist: filepath = os.path.join( rootdir, f ) if os.path.isfile(filepath):

  • python 实现删除文件或文件夹实例详解

    python 实现删除文件或文件夹 最近自己学习Python 的知识,自己学习抓取网页的内容知识等,在学习的时候Python 删除文件夹或者文件知识的时候,觉得本篇内容不错,推荐给大家. 实例代码,仔细看注释明细: #-*- coding: UTF-8 -*- # 有时候要删除文件夹里文件或文件夹 # 这个小类用来删除文件或文件夹还是相当有用的 # 删除文件时有时希看到删除的结果,于是就有了这个Deleter了 # 下面的一些文件注释用的是Doxygen的样式 # 用了英文,先就不改回中文吧.

  • python删除特定文件的方法

    本文实例讲述了python删除特定文件的方法.分享给大家供大家参考.具体如下: #!/usr/bin/python # -*- coding: utf-8 -*- import os def del_files(path): for root , dirs, files in os.walk(path): for name in files: if name.endswith(".CR2"): os.remove(os.path.join(root, name)) print (&qu

  • python实现删除文件与目录的方法

    本文实例讲述了python实现删除文件与目录的方法.分享给大家供大家参考.具体实现方法如下: os.remove(path) 删除文件 path. 如果path是一个目录, 抛出 OSError错误.如果要删除目录,请使用rmdir(). remove() 同 unlink() 的功能是一样的 在Windows系统中,删除一个正在使用的文件,将抛出异常.在Unix中,目录表中的记录被删除,但文件的存储还在. os.removedirs(path) 递归地删除目录.类似于rmdir(), 如果子目

  • python创建和删除目录的方法

    本文实例讲述了python创建和删除目录的方法.分享给大家供大家参考.具体分析如下: 下面的代码可以先创建一个目录,然后调用自定义的deleteDir函数删除整个目录 #-------------------------------------- # Name: create_directory.py # Author: Kevin Harris # Last Modified: 02/13/04 # Description: This Python script demonstrates #

  • 用Python删除本地目录下某一时间点之前创建的所有文件的实例

    因为工作原因,需要定期清理某个文件夹下面创建时间超过1年的所有文件,所以今天集中学习了一下Python对于本地文件及文件夹的操作.网上 这篇文章 简明扼要地整理出最常见的os方法,抄袭如下: os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os.curdir:返回当前目录('.') os.chdir(dirname):改变工作目录到dirname os.path.isdir(name):判断name是不是一个目录,name不是目

  • Python删除指定目录下过期文件的2个脚本分享

    脚本1: 这两天用python写了一个删除指定目录下过期时间的脚本.也可能是我初学python,对python还不够熟习,总觉得这个脚本用shell写应该更简单也更容易些.就功能上来说,该脚本已经实现了我想要的效果,不过该脚本还不够通用性,还有更多可以完善的地方.目前该脚本在python2.4下运行良好.同时,我在脚本中加入了对python版本的判断,理论上2.7下也应该可以正常使用.有环境的朋友可以帮忙测试一下.该脚本不完善的地方在于,只能支持一级目录下的文件删除,还不支持目录递归.同时过期文

  • 使用Python监视指定目录下文件变更的方法

    监视指定目录下文件变更. # -*- coding: utf-8 -*- # @Author: xiaodong # @Date: just hide # @Last Modified by: xiaodong # @Last Modified time: just hide import os import glob import json import datetime from typing import Iterable """ 监视指定目录下文件变更 "&

  • python删除某个目录文件夹的方法

    python删除某个目录文件夹及文件的方法: #!/usr/bin/env python import os import shutil delList = [] delDir = "/home/test" delList = os.listdir(delDir ) for f in delList: filePath = os.path.join( delDir, f ) if os.path.isfile(filePath): os.remove(filePath) print f

  • python获取指定目录下所有文件名列表的方法

    本文实例讲述了python获取指定目录下所有文件名列表的方法.分享给大家供大家参考.具体实现方法如下: 这里python代码实现获取文件名列表的功能,可以指定文件中包含的字符,方便提取特定类型的文件名列表: # -*- coding: utf-8 -*- #~ #------------------------------------------------------------------ #~ module:wlab #~ Filename:wgetfilelist.py #~ Funct

  • Python读取一个目录下所有目录和文件的方法

    本文实例讲述了Python读取一个目录下所有目录和文件的方法.分享给大家供大家参考,具体如下: 这里介绍的是刚学python时的一个读取目录的列子,给大家分享下: #!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global allFileNum ''' 打印一个目录下的所有文件夹和文件 ''' # 所有文件夹,第一个字段是次目录的级别 dirList = [

  • Python读取指定目录下指定后缀文件并保存为docx

    最近有个奇葩要求 要项目中的N行代码 申请专利啥的 然后作为程序员当然不能复制粘贴 用代码解决.. 使用python-docx读写docx文件 环境使用python3.6.0 首先pip安装python-docx pip install python-docx 然后下面是脚本 修改目录,这里默认取脚本运行目录下的src文件夹 取.cs后缀的所有文件 读取并保存为docx 有一点需要注意,如果文件中有中文,请用vscode或者其他编辑器使用utf-8格式打开,看看有没有乱码 其中每处理一个文件都会

  • python对指定目录下文件进行批量重命名的方法

    本文实例讲述了python对指定目录下文件进行批量重命名的方法.分享给大家供大家参考.具体如下: 这段python代码可对c:\temp目录下的所有文件名为"scroll_1"文件替换为"scroll_00" import os path = 'c:\\temp' for file in os.listdir(path): if os.path.isfile(os.path.join(path,file))==True: newname = file.replace

  • python在指定目录下查找gif文件的方法

    本文实例讲述了python在指定目录下查找gif文件的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python # Use the standard find method to look for GIF files. import sys, find if len(sys.argv) > 1: dirs = sys.argv[1:] else: dirs = [ '.' ] # Go for it. for dir in dirs: files = find.find

  • java删除指定目录下所有空文件夹的方法

    本文实例讲述了java删除指定目录下所有空文件夹的方法.分享给大家供大家参考,具体如下: package com.func; import java.io.File; import java.util.ArrayList; import java.util.List; /** * 删除指定目录下的所有空文件夹 * * @author zdw * */ public class FileUtils { List<File> list = new ArrayList<File>();

随机推荐