因为你需要加入dirname同x,os.listdir()只是列出了内容直接,内容不具有完整路径。
范例-
[x for x in os.listdir(’dirname’) if os.path.isfile(os.path.join(’dirname’,x))]
如果未提供完整路径,则os.path.isfile()在当前目录中搜索,因此当您给出时’.’,os.listdir()将获得正确的列表。
范例-
假设某个文件夹-/a/b/c具有文件-x并y在其中。
当您执行-时os.listdir(’/a/b/c’),返回的列表类似于-
[’x’,’y’]
即使您在其中提供绝对路径os.listdir(),列表中返回的文件也将具有指向目录的相对路径。您将需要手动加入dirx以获得正确的结果。
在您的第三个示例中,它不起作用,因为它os.path.abspath()也适用于当前目录,因此,如果执行以下操作-
os.path.abspath(’somefile’)
产生的结果将是–/path/to/current/directory/somefile不会验证该文件是否为真实文件/目录。
在文档(Emphasismine)中明确指出-
返回路径名路径的标准化绝对化版本。在大多数平台上,
其中,os.getcwd()返回当前工作目录的路径。
解决方法我正在尝试这样做:
import os[x for x in os.listdir(’.’) if os.path.isfile(x)][x for x in os.listdir(’dirname’) if os.path.isfile(x)][x for x in os.listdir(os.path.abspath(’dirname’)) if os.path.isfile(os.path.abspath(x))]
第一行有效:
[x for x in os.listdir(’.’) if os.path.isfile(x)]
但是接下来的两个:
[x for x in os.listdir(’dirname’) if os.path.isfile(x)]
和
[x for x in os.listdir(os.path.abspath(’dirname’)) if os.path.isfile(os.path.abspath(x))]
只是输出 []
为什么?