2017-07-08 11 views
2

私は90日以上のすべてのフォルダを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

だけdirsに印刷した後破る:

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.walk()の文書を1としてos.listdir

+1

ここでは、インデックス作成の代わりに 'next'を使用しています。 –

1

を使用:

topdownTrueある場合、発信者は、おそらくdel又はスライス割当を使用して(インプレースdirnamesリストを修正することができ)、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を返します。

関連する問題