2010-01-06 59 views
0

我每天創建幾個目錄。七天後,我將在這些目錄中放置一個沙盒並刪除它們。我用時間戳來命名它們。我在下面有一些代碼來向你展示我所得到的。如何進入多個目錄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() 

這是我之前用來刪除沙盒並刪除一個目錄的類似代碼。但是在這些日子裏可能會有幾個版本,我想知道如何進入每個文件夾並完成這些任務。

目錄中的文件夾將創建與他們的時間以及他們的日期,我有變量,只是刪除設置日期的所有文件夾,無論時間。

感謝

+0

只是一邊的問題..在你的代碼中,你打算怎麼用''myObject''以後做什麼? – miku 2010-01-06 13:38:03

+0

是的,因爲它會是'沒有'... – 2010-01-06 13:43:34

回答

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功能列表,並指望他們做正確的事情。他們一次一個地工作。

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):