Python - OSError:[Errno 2]没有这样的文件或目录

时间:2016-09-22 23:35:26

标签: python delete-file os.walk

我已经阅读了很多关于这个问题的问题,但我注意到它出现的原因有很多,并且没有找到我特定问题的答案。问题是,我不小心删除了一些文件,并使用photorec尝试恢复它们(我在Ubuntu 16.04 Xenial上)。问题是,它恢复了2600+个文件夹!我正在写一个小文件抓取器来摆脱我不需要的文件 - 我感兴趣的唯一文件是.py,.jpg,.png和.mp3。以下是我的抓取工具的代码:

import os

path=

for (path, dirs, files) in os.walk(path):
    for name in files:
        if name.endswith('.py') or name.endswith('.jpg') or name.endswith('.png') or name.endswith('.mp3'):
            continue
        else: os.remove(name)

我手动定义'path',我已经完成了一个测试,我打印了部分路径,dirs和文件,并打印出我想要的内容。但是,在运行下面的代码时,它会返回:

OSError: [Errno 2] No such file or directory: 'f0272560.java'

我假设是我尝试删除的第一个文件。我猜它已经删除之后再次查找该文件。这有意义还是其他任何引发错误的东西?我怎么能解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:2)

files编辑的list yield os.walk是文件的非限定名称。除非它们碰巧在工作目录中,os.remove无法通过不合格的名称删除它们,因为它不知道在哪里找到它们。变化:

os.remove(name)

os.remove(os.path.join(path, name))

所以你传递一个合格的路径到文件,而不仅仅是它的名字。

旁注:如果您从不需要path的原始定义,它可以正常运行,但使用来自path的每循环os.walk覆盖它可能会造成混淆。您可能希望更改其中一个的名称,将顶级一个更改为rootdir或将循环变量名称更改为其他名称(例如curdir)。