Python 删除隐藏目录?

Python 删除隐藏目录?,python,python-3.x,Python,Python 3.x,我有一个目录,在目录树的任何地方都可以有。不需要的目录。我想把这些删除 import shutil shutil.rmtree('.unwanted', onerror=True) 这不起作用,因为目录是隐藏的。输出: Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\shutil.py", line 374, in _rmtr

我有一个目录,在目录树的任何地方都可以有
。不需要的
目录。我想把这些删除

import shutil
shutil.rmtree('.unwanted', onerror=True)
这不起作用,因为目录是隐藏的。输出:

Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\shutil.py", line 374, in _rmtree_unsafe
    with os.scandir(path) as scandir_it:
FileNotFoundError: [WinError 3] The system cannot find the path specified: '.unwanted'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/SYSTEM/CODING/PYTHON/import.py", line 31, in <module>
    shutil.rmtree('.unwanted', onerror=True)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\shutil.py", line 516, in rmtree
    return _rmtree_unsafe(path, onerror)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\shutil.py", line 377, in _rmtree_unsafe
    onerror(os.scandir, path, sys.exc_info())
TypeError: 'bool' object is not callable

Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\shutil.py”,第374行,在rmtree中
将os.scandir(路径)作为scandir\u它:
FileNotFoundError:[WinError 3]系统找不到指定的路径:'.不需要的'
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“D:/SYSTEM/CODING/PYTHON/import.py”,第31行,在
shutil.rmtree('.dispured',onerror=True)
rmtree中的文件“C:\Users\Administrator\AppData\Local\Programs\Python37\lib\shutil.py”,第516行
返回树不安全(路径、错误)
文件“C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\shutil.py”,第377行,位于rmtree\u
OneError(os.scandir,path,sys.exc_info())
TypeError:“bool”对象不可调用
进程已完成,退出代码为1
无论行号如何,示例代码都来自较大的脚本。

您可以尝试:

import os
os.system("rm -rf .directory_name")

你从onerror打来的电话好像错了?也许你想写以下内容

import shutil
shutil.rmtree('.unwanted', ignore_errors=True)
参数“onerror”指定一个处理程序

从文档中可以看出:如果提供了onerror,那么它必须是一个可调用的,可以接受三个参数:function、path和excinfo


请参阅官方文档

在@OcasoProtal提供的链接中找到的解决方案几乎没有修改,尽管其中一些仍然是个谜。欢迎评论

import shutil
for root, subdirs, files in os.walk('.'):
    for d in subdirs:
        if d == ".unwanted":
            shutil.rmtree(os.path.join(root, d))

你确定你在正确的目录中吗?最好使用绝对路径。工作目录是
e:\import
,但是
不需要的
目录位于未知目录中的某个位置。然后您必须使用,将不会神奇地删除工作目录下的所有子目录
“rm”不被识别为内部或外部命令,可操作的程序或批处理文件。
这是一个Linux命令,请改用Windows命令。哦,明白了。我尝试了
os.system(“for/d/r%u in(.redired)do rd/s/q%u”)
但是我遇到了很多错误
系统找不到指定的文件/路径)
,并且
不需要的
目录仍然存在。它必须在整个树中删除它们。这也只会直接删除根目录中的路径
root
是您从os.walk获得的当前路径,因此您不能删除它。walk返回一个3元组,您可能不需要该元组中的所有内容,但删除它并不好。只需添加一个print语句,您就会看到;)因此,我可以将操作系统中的根目录、子目录、文件的
更改为操作系统中的子目录的
因为
。不需要的
目录不能在根目录中,也不能是文件。。?不,你不能。但是我怀疑你可以放弃
,因为。。。细分曲面
循环。不幸的是,我目前手头没有python来测试它。只需对os.walk('.')中的root、subdirs和文件执行
,然后打印所有三个元素,您就会看到os.walk是如何工作的(或者使用调试器逐步检查代码和变量)。是的,另一个if应该足够了,即使只在root中。但是您需要,因为rmtree只在目录上工作。不要忘记导入操作系统。正如我所说:如果您不确定,只需添加一个打印而不是rmtree/os.remove您就是一个!使用并请执行以下操作: