2

我正在制作一个程序,可以在 python 中打印超过 90 天的所有文件夹。
这是我的代码:

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)

问题是这会打印所有文件夹,但它也会打印我不需要的文件夹的子文件夹。如何更改代码以使其仅打印文件夹?

4

4 回答 4

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

或者查看 using os.listdir(),它不会递归到子目录中(但您必须检查结果中的非目录)。

于 2017-07-08T11:46:38.237 回答
1
(root, dirs, files) = next(os.walk(path))
for name in dirs:

或者使用os.listdir

于 2017-07-08T11:46:46.027 回答
1

根据以下文档os.walk()

topdownis时,调用者可以就地True修改列表(可能使用或切片赋值),并且只会递归到名称保留在的子目录中;[...]dirnamesdelwalk()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[:]
于 2017-07-08T11:47:15.837 回答
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。

于 2017-07-08T11:47:54.240 回答