os.path.isfile()不起作用。为什么?

【字号: 日期:2024-03-07浏览:25作者:雯心
如何解决os.path.isfile()不起作用。为什么??

因为你需要加入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))]

只是输出 []

为什么?

相关文章: