FileNotFoundError:[Errno 2]在Python中没有使用os.unlink的文件或目录
该脚本的思想是让用户输入一个文件夹作为命令行参数,并让代码标识要删除的扩展。当我执行测试运行并只打印将被删除的文件和文件夹时,它可以完美地工作,但是当我在未注释os.unlink部分的情况下运行脚本时,我会得到FileNotFoundErrorFileNotFoundError:[Errno 2]在Python中没有使用os.unlink的文件或目录,python,python-3.x,Python,Python 3.x,该脚本的思想是让用户输入一个文件夹作为命令行参数,并让代码标识要删除的扩展。当我执行测试运行并只打印将被删除的文件和文件夹时,它可以完美地工作,但是当我在未注释os.unlink部分的情况下运行脚本时,我会得到FileNotFoundError #! usr/bin/python3 import os import sys def clean(path): extensions = (".txt", ".jpg", ".jpeg", ".nfo", ".png", ".bmp")
#! usr/bin/python3
import os
import sys
def clean(path):
extensions = (".txt", ".jpg", ".jpeg", ".nfo", ".png", ".bmp")
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(extensions):
os.unlink(file)
# print('Removing File:', os.path.join(root, file))
for directories, names, files in os.walk(path):
if os.listdir(directories):
os.unlink(directories)
# print('Removing Directory:', directories)
if __name__ == "__main__":
filthy = sys.argv[1]
clean(filthy)
错误消息:
Traceback (most recent call last):
File "/home/a5pire/source/repos/plex/mediaClean/mediaClean.py", line 24, in <module>
clean(filthy)
File "/home/a5pire/source/repos/plex/mediaClean/mediaClean.py", line 13, in clean
os.unlink(file)
FileNotFoundError: [Errno 2] No such file or directory: 'stuff.txt'
回溯(最近一次呼叫最后一次):
文件“/home/a5pire/source/repos/plex/mediaClean/mediaClean.py”,第24行,in
干净(肮脏)
文件“/home/a5pire/source/repos/plex/mediaClean/mediaClean.py”,第13行,干净
取消链接(文件)
FileNotFoundError:[Errno 2]没有这样的文件或目录:“stuff.txt”
stuff.txt文件肯定存在。由
os.walk
生成的文件列表只包含文件名。您应该将存储在root
中的路径名与文件名连接起来,以便将完整路径名传递到os。取消链接:
os.unlink(os.path.join(root, file))
此外,如果要删除空目录,如果不是os.listdir(目录):
则应执行操作,而不是os.listdir(目录):
则执行操作,但由于您已经在使用os.walk
,它将子目录列表作为生成的元组中的第二项返回,因此您只需使用它即可,并使用top-down=False
参数确保子目录在其父目录之前被删除:
for directories, names, files in os.walk(path, topdown=False):
if not names:
os.rmdir(directories)
os.walk
生成的files
列表仅包含文件名。您应该将存储在root
中的路径名与文件名连接起来,以便将完整路径名传递到os。取消链接:
os.unlink(os.path.join(root, file))
此外,如果要删除空目录,如果不是os.listdir(目录):
则应执行操作,而不是os.listdir(目录):
则执行操作,但由于您已经在使用os.walk
,它将子目录列表作为生成的元组中的第二项返回,因此您只需使用它即可,并使用top-down=False
参数确保子目录在其父目录之前被删除:
for directories, names, files in os.walk(path, topdown=False):
if not names:
os.rmdir(directories)
谢谢你的回复。这似乎对文件有效,但是现在我得到了一个关于文件夹的错误:isDirectoryError:[Errno 21]是一个目录:“/home/a5pire/source/repos/plex/mediaClean/testFiles/”你应该使用os.rmdir
,而不是os.unlink
,来删除一个目录。这实际上有些令人沮丧。我现在得到的错误告诉我,目录不是空的。。。。很明显,它们不是,因为它们包含其他目录,所以我该如何解决这个问题呢?你的情况正好相反。我也用一个更好的方法更新了我的答案。谢谢你的回复。这似乎对文件有效,但是现在我得到了一个关于文件夹的错误:isDirectoryError:[Errno 21]是一个目录:“/home/a5pire/source/repos/plex/mediaClean/testFiles/”你应该使用os.rmdir
,而不是os.unlink
,来删除一个目录。这实际上有些令人沮丧。我现在得到的错误告诉我,目录不是空的。。。。很明显,它们不是,因为它们包含其他目录,所以我该如何解决这个问题呢?你的情况正好相反。我还用一个更好的方法的例子更新了我的答案。