python怎么删除上一行命令,python怎样删除文件中的指定内容
因为工作原因,需要定期清理某个文件夹下所有创建一年以上的文件,所以今天我重点讲了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):判断名称是否为文件,如果没有名称则返回false。
Os.path.exists(name):确定是否有文件名或目录名。
Os.path.getsize(name):获取文件大小,如果名称是目录则返回0L。
Os.path.abspath(name):获取绝对路径
Os.path.normpath(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)#要删除的目录的路径。需要注意的是,使用os.rmdir删除的目录必须是空目录,否则函数会出错。
Os.path.getmtime (name) #获取文件的修改时间
Os.stat(路径)。获取文件的修改时间
Os.stat(路径)。st_ctime #获取文件修改时间
Os.path.getctime(name)#获取文件的创建时间
于是我就按照这些方法,花了半天时间试着写出了“清理某个路径下的所有文件和文件夹”的方法。代码如下:
导入操作系统
dire empted= d:\ _ data \ Python \ OS #要清空的文件夹
ds=list(OS . walk(dirtobeempted))#获取所有文件夹的信息列表
Dsr=ds[:-1] #反转列表,从最底层的文件夹开始清除。
在DSR: #遍历列表
打印(d) #打印出列表项并遵守规则。
如果d[2]!=[]: #如果此路径中有文件
d [2]中的x:#先清理文件。
os.remove(os.path.join(d[0],x))
对于DSR: #再次遍历列表
如果d[1]!=[]: #如果该路径下有子文件夹
对于d[1]中的y:#清理子文件夹
os.rmdir(os.path.join(d[0],y))
之所以这么麻烦,是因为os.rmdir()有问题,只能删除“空”文件夹。所以只能从底层文件夹开始清理,一级一级的清理。
想了想,应该有更简单的方法,因为清空文件夹是一个很常见的动作。查了Python官方文档,发现了os之外的另一个模块:shutil(高级文件操作)。实际上有一个shutil.rmtree()的方法,不仅清空,还直接删除文件夹。太残忍了!
为了“只是清空”,我用shutil模块重写了代码:
导入shutil,os
OS . chdir( d:\ _ data \ python \ OS )#输入要清空的目录
Ds=list(os.listdir()) #获取该目录中所有文件或文件夹的列表
对于ds中的:#遍历列表
If.path.isfile (d): #如果列表项是文件
操作系统.删除(d) #直接删除
Else: #如果不是文件,那一定是文件夹
Shutil.rmtree(d) #也直接删除。
这就简洁多了。
然而清空是一件乐事,却偏离了我最初的目的:我只想删除过期的文件,但文件夹和所有子文件夹都得保留。不难。在初始代码中,列表的第一次遍历是只删除文件,不删除文件夹。只要加上判断语句,确定文件是否过期,就可以达到目的。
我要删除的文件,其实就是我做镜像备份的时候,为了恢复,从主机上临时删除或者更改的文件。随着时间的推移,这些文件将占用越来越多的空间,因此它们将在一年后过期。这些文件的一个特点是只会被复制一次,不会被修改,所以只需要判断其创建日期即可。
想起来容易,但万万没想到Python对时间的处理是如此复杂!涉及到两个模块:datetime和time。有时间就要开始系统学习,但是在这里,我只关心现在需要的几个方法:
Datetime.datetime.now() #获取当前时间,返回值格式类似Datetime.datetime (2017,12,14,1,29,24,406538)
Datetime.timedelta() #为时间计算设置两个时间之间的间隔。可以设置的单位包括:(天=0,秒=0,毫秒=0,分钟=0,小时=0,周=0)。默认值都是0。
Os.path.getctime() #获取文件的创建时间。返回值的格式是一个巨大的浮点数,是从1970年1月1日到这个创建时间的秒数。
datetime . datetime . fromtimestamp()#将os.path.getctime()转换为与datetime.datetime.now()相同的格式,以便进行比较计算。
弄清楚上面的乱七八糟之后,就可以写代码了:
导入操作系统,日期时间
dire empted= d:\ _ data \ Python \ OS #要清空的文件夹
ds=list(OS . walk(dirtobeempted))#获取所有文件夹的信息列表
delta=datetime . time delta(days=365)#将365天的文件设置为过期。
Now=datetime.datetime.now() #获取当前时间
对于ds中的:#遍历列表
Os.chdir(d[0]) #在此级别输入路径,以防止文件被找到并报告错误。
如果d[2]!=[]: #如果此路径中有文件
d [2]中的x:#遍历这些文件
ctime=datetime . datetime . fromtimestamp(OS . path . getctime(x))#获取文件创建时间
If ctime (now-delta): #如果它是在天前创建的delta
Os.remove(x) #被删除。
呼~ ~ ~ ~ ~ ~ ~ ~
太复杂了!不知道有没有更简单的方法.
上面这个用Python删除本地目录中某个点之前创建的所有文件的例子,就是边肖分享的所有内容。希望能给大家一个参考,也希望大家多多支持剧本之家。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。