2017-07-08 40 views
2

我正在製作一個程序,打印超過90天的所有文件夾在Python中。
這裏是我的代碼:python打印文件夾和子文件夾時,只需要在python的文件夾

import os 
from datetime import date 
from Tkinter import * 
import Tkinter, Tkconstants, tkFileDialog 


old_dirs = [] 
today = date.today() 

home1 = os.path.join(os.environ["HOMEPATH"], "Desktop") 
desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') 

root = Tk() 
root.withdraw() 
path = tkFileDialog.askdirectory(initialdir=desktop, title="Select folder to 
scan from: ") 
path = path.encode('utf-8') 

for root, dirs, files in os.walk(path): 
    for name in dirs: 
     filedate = date.fromtimestamp(os.path.getmtime(os.path.join(root, name))) 
     if (today - filedate).days > 90: 
      print name 
      old_dirs.append(name) 

的問題是,這種打印的所有文件夾,但它也打印文件夾,我不需要的子文件夾。如何更改代碼以便它只打印文件夾?

回答

2

打印迪爾斯後剛剛突破:

for root, dirs, files in os.walk(path): 
    for name in dirs: 
     filedate = date.fromtimestamp(os.path.getmtime(os.path.join(root, name))) 
     if (today - filedate).days > 90: 
      print name 
      old_dirs.append(name) 
    break 

或可考慮使用os.listdir(),不遞歸到子目錄(但你必須在結果檢查非目錄)。

1
(root, dirs, files) = next(os.walk(path)) 
for name in dirs: 

或可替代地使用os.listdir

+1

對,在這裏按順序使用'next'而不是索引。 –

1

作爲每os.walk()文檔:

topdownTrue,呼叫者可以修改dirnames列表就地(也許使用del或切片分配)和walk()只會遞歸到名稱保留在dirnames中的子目錄; [...]

for root, dirs, files in os.walk(path): 
    for name in dirs: 
     filedate = date.fromtimestamp(os.path.getmtime(os.path.join(root, name))) 
     if (today - filedate).days > 90: 
      print name 
      old_dirs.append(name) 
    del dirs[:] 
1

使用os.listdir舉個例子:如果一個文件只是一個目錄

root = os.getcwd() 

for name in os.listdir(path): 
    full_path = os.path.join(root, name) 

    if os.path.isdir(full_path): 
     filedate = date.fromtimestamp(os.path.getmtime(full_path)) 

     if (today - filedate).days > 90: 
      old_dirs.append(name) 

os.path.isdir將返回true。

相關問題