如何在Python中进入多个目录

0 投票
3 回答
1020 浏览
提问于 2025-04-15 17:42

我每天都会创建几个文件夹。七天后,我会在这些文件夹里放一个沙盒,然后把它们删除。我用时间戳来给这些文件夹命名。下面是我写的一些代码,给你们看看。

today = datetime.date.today() # Today's date Binary
todaystr = datetime.date.today().isoformat() # Todays date as a string
minus_sevent = today - datetime.timedelta(days = 7) # 7 days ago as a string
minus_seven = minus_sevent.isoformat()
old_folders = minus_seven + '*'
def delete_sandbox():

    if os.path.exists(old_folders):
        os.chdir(old_folders)
        mks_drop_sandbox()
        os.chdir(rootDir)
        for filename in glob.glob(old_folders):
            shutil.rmtree(old_folders)
        print 'Sandboxes from 7 days ago removed'

if __name__ == '__main__': myObject = delete_sandbox()

这段代码和我之前用来放沙盒和删除一个文件夹的代码很像。不过,可能在这几天里会有多个构建,我想知道怎么进入每个文件夹并完成这些任务。

这些文件夹会根据它们的时间和日期来创建,我有一些变量可以根据日期来删除所有文件夹,而不管具体的时间。

谢谢!

3 个回答

0

我想知道怎么进入每个文件夹。

你是在问如何使用 os.path.join 来创建完整的路径吗?

http://docs.python.org/library/os.path.html#os.path.join

还是在问 os.chdir 来改变当前工作目录呢?

http://docs.python.org/library/os.html#os.chdir

0

你有两个选择:

使用 os.walk

for root, dirs, files in os.walk('your root'):
for dir in dirs:
        os.chdir(os.path.join(root, dir))
        delete_sandbox()

使用 os.path.walk,然后把 delete_sandbox 改成用作回调函数。

def delete_sandbox(arg, dirname, names):
3

old_folders = minus_seven + '*'

这个写法并不是你想的那样。它会给你一个文件夹的名字,后面真的会有一个*符号。这样的话,后面用os.path.exists()检查的时候会返回False,也就是说这个文件夹并不存在。

你需要做的是遍历这些目录:

for d in os.listdir(os.getcwd()):
    if not os.path.isdir(d) or not d.startswith(minus_seven):
        continue
    # Do what you need to with 'd' here.

或者用列表推导式来写:

minus_seven_dirs = [d for d in os.listdir(os.getcwd())
    if os.path.isdir(d) and d.startswith(minus_seven)]

简单来说,你不能把一个列表直接传给os的函数,期待它们能正确处理。它们是一个一个路径处理的。

撰写回答