【发布时间】:2009-12-28 01:27:05
【问题描述】:
对于此代码:
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?
【问题讨论】:
对于此代码:
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?
【问题讨论】:
'dsa\wqqqq\ffff' 并不意味着您可能认为的那样:\f,在字符串中,是一个转义序列,并扩展为与 chr(12) 相同的字符(ASCII“换页”)。
所以print os.path.exists('dsa\wqqqq\ffff') 将打印 True 如果:
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 编译器避免解释其中的反斜杠(但是,不要尝试用反斜杠end这样的文字, 因为反斜杠 is 仍然被用来转义引号)。或者:
print os.path.exists('dsa\\wqqqq\\ffff')
加倍反斜杠有效。另请注意:
print os.path.exists('dsa/wqqqq/ffff')
使用普通斜杠而不是反斜杠,在 Windows 和其他地方都可以正常工作(这使得想要在这里使用反斜杠特别荒谬,除非有人故意试图获得一个在非 Windows 机器上表现怪异的程序)。
您在编写代码后在文本中提出的其他更简单的问题更容易:os.path.exists('what'),在任何平台上,如果当前工作目录中有名为 what 的文件或子目录,则打印 True。
【讨论】:
如果路径指向一个 现有路径。返回 False 断开的符号链接。一些 平台,此函数可能会返回 如果未授予权限,则为 False 对请求执行 os.stat() 文件,即使物理路径 存在。
【讨论】:
如果路径存在,它将打印 True。不确定是什么混乱,在这里。不是粗鲁,而是 RTFM。
% 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
【讨论】: