我正在尝试这样做:
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))]
仅输出[]
为什么?
因为需要将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()
中给出了绝对路径,列表中返回的文件也会有到目录的相对路径。你需要手动连接目录和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()
正在当前目录中查找。除非在文件名中包含目录名,否则它不知道在哪里可以找到文件。