我已经阅读了很多关于这个问题的问题,但我注意到它出现的原因有很多,并且没有找到我特定问题的答案。问题是,我不小心删除了一些文件,并使用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'
我假设是我尝试删除的第一个文件。我猜它已经删除之后再次查找该文件。这有意义还是其他任何引发错误的东西?我怎么能解决这个问题?
提前致谢!
答案 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
)。