如何简洁地表达“获取x天以上的所有文件夹”
我有一个方法getOldDirs(dirPath,older than days),它必须遍历一个给定的根文件夹,并返回一个比7天旧的文件夹列表。
我从另一个函数cleanOldFolders()调用上面的函数。cleanOldFolders()将删除类似于“rm-Rf”的文件夹
我拥有的代码,如何简洁地修改循环:
"""
Clean oldFolders
"""
def cleanOldFolders(self):
pathString = self.folderRoot + '/' + self.configMode + '/' + self.appId
oldDirList = self.getOldDirs(pathString, 7);
# Notify user that the following folders are deleted
# remove all old dirs perhaps using shutil.removetree for each folder oldDirList, rm -Rf
return
得到老德尔斯:
"""
get all subfolders under dirPath older than olderThanDays
"""
def getOldDirs(self,dirPath, olderThanDays):
# What is the concise way of expressing Get me list of all dir/subdirs from "dirPath" that are older than "olderThanDays"
# I know I have to use os.walk,
# I want a concise loop like this - but should recurse using os.walk
a = [os.path.join(dirPath, myfile) for myfile in os.listdir(dirPath)
if (os.path.isdir(os.path.join(dirPath, myfile)) and
(self.isOlder(os.path.join(dirPath, myfile), olderThanDays))
)]
# for root, dirs, files in os.walk(dirPath):
# for name in dirs:
# print os.path.join(root, name)
return a
它使用os.walk并为您提供7天以上的文件列表
这应该是一个起点。
另外,如果您不想进入早于
older_than
天的文件夹(因为您要删除它们),您可以修剪搜索树,从folders
列表中删除文件夹名关于
os.walk()
的一个好处是它为您执行递归。为了在应用程序中使用它,必须将可选的关键字参数指定为False
,因为它的默认值是True
,并且os.rmdir()
不会删除非空目录。这意味着在删除子目录之前,您的代码需要删除它遇到的每个子目录中的所有文件和子目录。为了方便这样做,目录列表
getOldDirs()
返回应该按照需要删除子目录的顺序。还需要注意的是,在下面的代码中,目录的时间是以小数而不是整天计算的,这意味着秒数是有意义的,也就是说,6天23小时59秒的时间不会被放到要删除的列表中,即使它离足够大的时间只有2秒。
相关问题 更多 >
编程相关推荐