Python中os.path的返回值
对于这段代码:
import os
a=os.path.join('dsa','wqqqq','ffff')
print a
print os.path.exists('dsa\wqqqq\ffff') #what situation this will be print True?
什么时候 os.path.exists('what') 会打印出 True
呢?
3 个回答
如果这个路径存在,它会打印出“True”。我不太明白大家为什么会困惑。不是想冒犯你们,但请好好看看说明书。
% mkdir -p dsa/wqqqq/ffff
% cat <<EOF | python
> import os
> a=os.path.join('dsa','wqqqq','ffff')
> print a
> print os.path.exists('dsa/wqqqq/ffff')
> EOF
dsa/wqqqq/ffff
True
如果路径指向一个存在的文件或文件夹,就返回True。如果是坏掉的符号链接(也就是指向一个不存在的地方),就返回False。在某些系统上,如果没有权限去执行os.stat()这个操作,即使路径实际上存在,这个函数也可能返回False。
'dsa\wqqqq\ffff'
的意思可能和你想的不一样:在字符串中,\f
是一个转义序列,它代表的字符和 chr(12)
是一样的(ASCII 中的“换页”字符)。
所以如果你运行 print os.path.exists('dsa\wqqqq\ffff')
,它会在以下情况下输出 True:
- 在 Windows 系统上,如果当前工作目录下有一个名为
dsa
的子目录,并且在这个子目录里有一个文件或子目录,名字是'wqqqq' + chr(12) + 'fff'
。 - 在 Linux、Mac 等系统上,如果当前目录下有一个文件或子目录,名字是
'dsa' + '\' + 'wqqqq' + chr(12) + 'fff'
。
这两个条件听起来都很奇怪,而且你想根据平台检查它们的组合似乎更不太可能。
更有可能的是,你可能想要
print os.path.exists(os.path.join('dsa', 'wqqqq', 'ffff'))
这样做可以跨平台运行,如果当前工作目录下有一个名为 dsa
的子目录,里面有一个名为 wqqqq
的子目录,里面还有一个文件或子目录 ffff
,就会打印 True。这样可以避免处理反斜杠的问题。
如果你想让你的代码只在 Windows 上执行这个检查(而在其他平台上有很不同的含义),你可以使用
print os.path.exists(r'dsa\wqqqq\ffff')
字符串前面的 r
告诉 Python 编译器不要解释其中的反斜杠(不过,不要尝试用反斜杠结束这样的字符串,因为反斜杠 仍然会 被当作转义符)。或者:
print os.path.exists('dsa\\wqqqq\\ffff')
把反斜杠加倍也可以。注意,
print os.path.exists('dsa/wqqqq/ffff')
用普通的斜杠代替反斜杠,在 Windows 和其他地方都能正常工作(这使得在这里想用反斜杠显得特别荒谬,除非你故意想让程序在非 Windows 机器上表现得很奇怪)。
你在代码后面提到的另一个更简单的问题是:os.path.exists('what')
,在任何平台上,如果当前工作目录下有一个名为 what
的文件或子目录,它就会打印 True。