FileNotFoundError:[Errno 2]在Python中没有使用os.unlink的文件或目录

FileNotFoundError:[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")

该脚本的思想是让用户输入一个文件夹作为命令行参数,并让代码标识要删除的扩展。当我执行测试运行并只打印将被删除的文件和文件夹时,它可以完美地工作,但是当我在未注释os.unlink部分的情况下运行脚本时,我会得到FileNotFoundError

#! 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
,来删除一个目录。这实际上有些令人沮丧。我现在得到的错误告诉我,目录不是空的。。。。很明显,它们不是,因为它们包含其他目录,所以我该如何解决这个问题呢?你的情况正好相反。我还用一个更好的方法的例子更新了我的答案。