如何进入多个目录Python

时间:2010-01-06 13:30:14

标签: python

我每天都会创建几个目录。七天后,我将在这些目录中删除一个沙箱并删除它们。我使用时间戳来命名它们。我在下面有一些代码可以告诉你我有什么。

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 :(得分: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个函数提供给列表并期望它们做正确的事情。他们一次只在路径上工作。

答案 1 :(得分: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

答案 2 :(得分: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):