6

我正在尝试这样做:

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

只输出[]

为什么?

4

2 回答 2

8

因为需要加入dirnamewith xos.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(),列表中返回的文件也会有到目录的相对路径。您将需要手动加入 dir 并x获得正确的结果。


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

os.path.abspath('somefile')

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

它在文档中明确说明(重点是我的) -

os.path.abspath(路径)

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

whereos.getcwd()返回当前工作目录的路径。

于 2015-08-22T14:22:01.290 回答
1

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

于 2015-08-22T14:22:47.023 回答