os.path.isfile() return 错误

os.path.isfile() return False

为什么这段代码return什么都没有?

>>> [f for f in os.listdir('Scripts') if os.path.isfile(os.path.abspath(f))]
[]
>>> os.listdir('Scripts')
['dmypy.exe', 'easy_install-3.8.exe', 'easy_install.exe', 'f2py.exe', 'futurize.exe', 'iptest.exe', 'iptest3.exe', 'ipython.exe', 'ipython3.exe', 'mypy.exe', 'mypyc', 'pasteurize.exe', 'pip.exe', 'pip3.8.exe', 'pip3.exe', 'prichunkpng', 'priforgepng', 'prigreypng', 'pripalpng', 'pripamtopng', 'pripnglsch', 'pripngtopam', 'priweavepng', 'pygmentize.exe', 'pyi-archive_viewer.exe', 'pyi-bindepend.exe', 'pyi-grab_version.exe', 'pyi-makespec.exe', 'pyi-set_version.exe', 'pyinstaller.exe', 'stubgen.exe', 'stubtest.exe', 'wheel.exe']

我理解这个问题的答案Why do os.path.isfile return False?,但我在这里添加了文件名的完整路径,但无论如何它不起作用

abspath 不是这里的正确工具。将 os.join 与 "Scripts" 目录一起使用:

[f for f in os.listdir('Scripts') if os.path.isfile(os.path.join("Scripts", f))]

关于abspath - 根据documentation,它基本上将当前工作目录加入文件名。如果您正在查看的文件不在当前目录中,这不是您想要的。

引用文档:

abspath: ... 在大多数平台上,这相当于调用函数 normpath(),如下所示:normpath(join(os.getcwd(), path)).

您的代码 returns 是一个空的 list 因为 os.path.abspath() 只是将给定的文件名附加到当前目录,而这些文件中的 none 实际上存在于当前目录中.

如果您想从 Scripts 文件夹中获取所有文件,那么您需要使用@Roy2012

的答案