删除Python中的旧目录

2024-05-16 10:39:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个目录,我希望超过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()

Tags: pathin目录文件夹timeosnotdelete
2条回答
  • drop_sandbox()做什么?(你给我们的函数是delete_sandbox())也许你的意思是这是一个递归函数,使用了错误的函数名
  • rootDir是全局变量吗?也许你的意思是os.chdir("..")
  • rootDir包含什么?os.listdir给出相对路径。如果rootDir是搜索的基础,则列出的目录可能无法工作。更糟的是:如果他们这样做了,你可能会删除一些你仍然想要的东西。

另外,shutil包有一个rmtree函数,您可能需要查看它。

os.listdir返回字符串列表,这些字符串是相对路径。当chdir到rootdir时,取决于rootdir是什么,这些路径可能不再有效。

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"

相关问题 更多 >