os.path.isfile() 不起作用。为什么?
os.path.isfile() doesn't work. Why?
我正在尝试这样做:
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()
中给出绝对路径,列表中返回的文件也将具有目录的相对路径。您需要手动加入 dir 和 x
才能获得正确的结果。
在你的第三个例子中,它不起作用,因为 os.path.abspath()
也适用于当前目录,所以如果你做类似 -
os.path.abspath('somefile')
产生的结果将是 - /path/to/current/directory/somefile
- 它不会验证那是否是真实的 file/dir。
在documentation(强调我的)中明确说明-
os.path.abspath(path)
Return a normalized absolutized version of the pathname path. On most platforms, this is equivalent to calling the function normpath() as follows: normpath(join(os.getcwd(), path))
.
其中 os.getcwd()
returns 当前工作目录的路径。
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))]
只输出[]
为什么?
因为需要加入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()
中给出绝对路径,列表中返回的文件也将具有目录的相对路径。您需要手动加入 dir 和 x
才能获得正确的结果。
在你的第三个例子中,它不起作用,因为 os.path.abspath()
也适用于当前目录,所以如果你做类似 -
os.path.abspath('somefile')
产生的结果将是 - /path/to/current/directory/somefile
- 它不会验证那是否是真实的 file/dir。
在documentation(强调我的)中明确说明-
os.path.abspath(path)
Return a normalized absolutized version of the pathname path. On most platforms, this is equivalent to calling the function normpath() as follows:
normpath(join(os.getcwd(), path))
.
其中 os.getcwd()
returns 当前工作目录的路径。
isfile()
正在当前目录中查找。除非您在文件名中包含目录名,否则它不知道在哪里可以找到您的文件。