Python中os.path的返回值

0 投票
3 回答
11870 浏览
提问于 2025-04-15 17:24

对于这段代码:

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 个回答

0

如果这个路径存在,它会打印出“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
1

如果路径指向一个存在的文件或文件夹,就返回True。如果是坏掉的符号链接(也就是指向一个不存在的地方),就返回False。在某些系统上,如果没有权限去执行os.stat()这个操作,即使路径实际上存在,这个函数也可能返回False。

http://docs.python.org/library/os.path.html#os.path.exists

8

'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。

撰写回答