使用Python脚本删除文件夹
a = '/mnt/task/a'
b = '/mnt/task/b'
在 a
和 b
下面,
有一些文件夹,它们的名字像 201212194546921-6ab-45654545d-5445c
这样。
正如你所看到的,这些文件夹的名字是由一些信息组成的,比如序列号和文件夹生成的日期。
如果我想删除在某个时间点之前生成的文件夹,我该如何找到并删除它们呢?
比如说,删除上周之前的文件夹。
这里有没有人能帮我一下?
2 个回答
0
有几个Python模块可以帮助你完成这个任务:
os.walk(path)
可以遍历给定路径下的所有文件夹。
os.path.getctime(fileName)
可以返回一个文件的创建日期。
shutil.rmtree(folder)
可以删除一个文件夹及其里面的所有内容。
如果把这些功能结合起来,你就能写出类似这样的代码:
import os
import time
import shutil
for folder ,subFolder, filenames in os.walk('/mnt/task/a'):
print folder , time.ctime( os.path.getctime(folder) )
if os.path.getctime(folder) < (time.time() - 60*60*24*7):
print 'deleting: ' , folder
#shutil.rmtree(folder)
while subFolder:
subFolder.pop()
注意:这段代码是根据文件的创建时间来删除文件夹的!!你可能还需要考虑其他的逻辑,而不仅仅是文件的日期。
0
假设你想删除的文件夹直接在 a
或 b
里面:
下面的代码会为每个文件夹创建一个日期时间对象,然后通过比较这些日期来决定要删除哪个文件夹。
import os, datetime, errno, stat, shutil
a =
b =
date = ''
ref = datetime.date(2013,12,20)
def parse_name(fname):
'''Returns False when unsucessful, datatime.date() when successful'''
if len(fname) > 9:
try:
year = int(fname[:4])
month = int(fname[4:6])
day = int(fname[6:8])
return datetime.date(year, month, day)
except ValueError,e:
return False
else:
return False
f2remove = []
for dirc in (a,b):
for item in os.listdir(dirc):
if os.path.isdir(os.path.join(dirc,item)):
x = parse_name(item)
if x and (ref - x).days >= 0:
f2remove.append(os.path.join(dirc,item))
# --- deleting files --- #
for filename in f2remove:
print 'removing', filename.split('\\')[-1]
shutil.rmtree(filename)