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



我正在尝试这样做:

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))] 

仅输出[]

为什么?

因为需要将dirnamex连接,所以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中有文件xy

当您执行-os.listdir('/a/b/c')时,返回的列表看起来像-

['x','y']

即使你在os.listdir()中给出了绝对路径,列表中返回的文件也会有到目录的相对路径。你需要手动连接目录和x才能得到正确的结果。


在您的第三个示例中,它不起作用,因为os.path.abspath()也适用于当前目录,所以如果您执行诸如-之类的操作

os.path.abspath('somefile')

生成的结果将是-/path/to/current/directory/somefile-它不会验证这是否是一个真实的文件/dir。

文件(强调矿(-中有明确说明

os.path.abspath(路径(

返回路径名路径的标准化绝对化版本。在大多数平台上,这相当于如下调用函数normpath((:normpath(join(os.getcwd(), path))

其中CCD_ 17返回到当前工作目录的路径。

isfile()正在当前目录中查找。除非在文件名中包含目录名,否则它不知道在哪里可以找到文件。

相关内容

最新更新