擅长:python、mysql、java
<p>关于<code>os.walk()</code>的一个好处是它为您执行递归。为了在应用程序中使用它,必须将可选的关键字参数指定为<code>False</code>,因为它的默认值是<code>True</code>,并且<code>os.rmdir()</code>不会删除非空目录。</p>
<p>这意味着在删除子目录之前,您的代码需要删除它遇到的每个子目录中的所有文件和子目录。为了方便这样做,目录列表<code>getOldDirs()</code>返回应该按照需要删除子目录的顺序。</p>
<p>还需要注意的是,在下面的代码中,目录的时间是以小数而不是整天计算的,这意味着秒数是有意义的,也就是说,6天23小时59秒的时间不会被放到要删除的列表中,即使它离足够大的时间只有2秒。</p>
<pre><code>import os
import time
def getOldDirs(self, dirPath, olderThanDays):
"""
return a list of all subfolders under dirPath older than olderThanDays
"""
olderThanDays *= 86400 # convert days to seconds
present = time.time()
for root, dirs, files in os.walk(dirPath, topdown=False):
for name in dirs:
subDirPath = os.path.join(root, name)
if (present - os.path.getmtime(subDirPath)) > olderThanDays:
yield subDirPath
</code></pre>