在Python中删除旧目录

2 投票
4 回答
9371 浏览
提问于 2025-04-15 19:06

我有几个文件夹,我想删除那些超过7天的文件夹。我已经写了一些代码,但好像不太管用。有没有人能帮我看看我哪里出错了?

def delete_sandbox():

    for directories in os.listdir(os.getcwd()): 

        if not os.path.isdir(directories) or not os.stat(directories).st_ctime < time.time()-(7*24*3600): 
            continue
        os.chdir(directories)
        drop_sandbox()
        os.chdir(rootDir)
        os.system("sudo rm -rf "+directories)
        print 'Folders older than 7 days old dropped and removed'

谢谢大家的帮助。

这些沙盒文件夹被创建了,但没有被删除。我希望程序能进入每一个文件夹,创建沙盒,然后再回到根目录,删除所有旧的文件夹。但我这样做后,文件夹还是存在。

这个功能之前是可以用的,当我通过文件夹名称里的日期字符串来删除文件夹时。但现在我想用时间戳来删除,就不行了。

我测试过 'rm -rf'+directories,但它并没有删除旧的文件夹。当我尝试 shutil.rmtree 时,出现了错误信息:

Traceback (most recent call last):
  File "yep.py", line 21, in <module>
    delete_sandbox()
  File "yep.py", line 18, in delete_sandbox
    shutil.rmtree(directories)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/shutil.py", line 208, in rmtree
    onerror(os.listdir, path, sys.exc_info())
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/shutil.py", line 206, in rmtree
    names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'Debug'

有没有其他方法可以删除这些文件夹?

我搞定了,使用了 shutil.rmtree,一切都正常了。谢谢大家的帮助。修改后的代码是:

def delete_sandbox():

    for directories in os.listdir(os.getcwd()): 

        if not os.path.isdir(directories) or not os.stat(directories).st_ctime < time.time()-(sbox_age): 
            continue
        os.chdir(directories)
        drop_sandbox()
        os.chdir(rootDir)
        shutil.rmtree(directories)
        print 'Sandboxes older than 7 days old dropped and removed'

delete_sandbox()

4 个回答

1
  • drop_sandbox()这个函数是干嘛的?(你给我们的函数是delete_sandbox())也许你是想写一个递归函数,但用了错误的函数名。
  • rootDir是全局变量吗?也许你是想用os.chdir("..")
  • rootDir里面有什么?os.listdir给出的只是相对路径。如果rootDir是你搜索的起点,你列出的目录可能不太好用。更糟的是:如果它们能用,你可能会删除一些你还想保留的东西。

另外,shutil这个包里有个rmtree函数,你可以看看。

1

os.listdir 会返回一个字符串列表,这些字符串是相对路径。当你切换到根目录(rootdir)时,这些路径可能会因为根目录的不同而变得无效。

11
import os
import time
import shutil
numdays = 86400*7
now = time.time()
directory=os.path.join("/home","path")
for r,d,f in os.walk(directory):
    for dir in d:
         timestamp = os.path.getmtime(os.path.join(r,dir))
         if now-numdays > timestamp:
             try:
                  print "removing ",os.path.join(r,dir)
                  # shutil.rmtree(os.path.join(r,dir))  #uncomment to use
             except Exception,e:
                  print e
                  pass
             else: 
                  print "some message for success"

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答