1

请不要标记为重复,因为我已经查看了带有此错误的其他问题,但我仍然无法弄清楚。

我正在制作一个基本扫描仪,它扫描给它的目录,并删除所有超过 90 天的子目录。这是代码:

import os, sys
import time
import shutil
from  Tkinter import *
import Tkinter, Tkconstants, tkFileDialog



now = time.time()
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 x in os.walk(path):
    for folders in x:
        while os.stat(folders).st_mtime < now - 90 * 86400:
            q = raw_input('Folder(s) found. NOTE: This will delete all directories or subdirectories in the folder. Do you want to remove?(y/n) ')
            if str(q) == "y" or str(q) == "Y":
                shutil.rmtree(path, ignore_errors=True)
                print 'Successfully deleted folder(s)'
            elif str(q) == "n" or str(q) == "N":
                print 'Folders not deleted.'
                sys.exit()
        else:
            print 'No folder(s) over 90 days' 

这是完整的回溯:

Traceback (most recent call last):
File "C:/Users/Bill/Desktop/limitScanner/scanner.py", line 20, in <module>
while os.stat(folders).st_mtime < now - 90 * 86400:
TypeError: coercing to Unicode: need string or buffer, list found

编辑:当我在具有多个子文件夹(例如桌面文件夹)的文件夹上使用我的程序时,它给了我以下错误:WindowsError: [Error 2] The system cannot find the file specified和第一个文件夹的名称。

我正在使用python 2.7.13. 有人可以帮忙吗?任何帮助都会受到广泛赞赏。

4

2 回答 2

1

os.walk返回一个 3-tuple (dirpath, dirnames, filenames)。您当前的方法迭代 3 元组,在第二次迭代中给出一个目录名称列表dirnames

但是,您只对以下内容感兴趣dirnames

for _, dirs, _ in os.walk(path):
    for folder in dirs:
        ...
于 2017-07-07T13:21:30.513 回答
0

为我工作:

import os, sys
import time
import shutil
from Tkinter import *
import Tkinter, Tkconstants, tkFileDialog

now = time.time()
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 _, x ,_ in os.walk(path):
    for folders in x:
        if os.stat(os.path.join(path,folders)).st_mtime < now - 90 * 86400:
            q = raw_input('Folder(s) found. NOTE: This will delete all directories or subdirectories in the folder. Do you want to remove?(y/n) ')
            if str(q) == "y" or str(q) == "Y":
                shutil.rmtree(path, ignore_errors=True)
                print 'Successfully deleted folder(s)'
            elif str(q) == "n" or str(q) == "N":
                print 'Folders not deleted.'
                sys.exit()
        else:
            print 'No folder(s) over 90 days'

os.walk(path)按照摩西所说的那样调整了输出,更改了whiletoif并添加了(os.path.join(path,folders),因此os.stat(...)可以找到有问题的文件夹。

for _, x ,_ in os.walk(path):
    for folders in x:
        if os.stat(os.path.join(path,folders)).st_mtime < now - 90 * 86400:
于 2017-07-07T14:08:34.777 回答