Python中os.path的返回值

Python中os.path的返回值,python,path,Python,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 如果路径引用了 现有路径。返回False表示 断开的符号链接。在一些 平台,此函数可能会返回 如果未授予权限,则为False 对请求的对象执行os.st

对于此代码:

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

如果路径引用了 现有路径。返回False表示 断开的符号链接。在一些 平台,此函数可能会返回 如果未授予权限,则为False 对请求的对象执行os.stat() 文件,即使路径在物理上 存在


'dsa\wqqqq\ffff'
并不意味着你可能认为它是什么:
\f
在一个字符串中,是一个转义序列,并扩展为与
chr(12)
相同的字符(ASCII“表单提要”)

因此,
print os.path.exists('dsa\wqqqq\ffff')
将在以下情况下打印为真:

  • 在Windows上,当前工作目录中有一个子目录
    dsa
    ,其中有一个文件或子目录,其名称等于字符串“wqqq”+chr(12)+“fff”
  • 在Linux、Mac等上,如果当前目录中有一个文件或子目录的名称等于字符串“'dsa'+'\'+'WQQQ'+chr(12)+'fff”
它们看起来像是两个需要检查的特殊情况,而您实际上想要根据平台检查它们的组合的可能性似乎更小

你可能更想

print os.path.exists(os.path.join('dsa', 'wqqqq', 'ffff'))
它跨平台工作,如果在当前工作目录中有一个子目录
dsa
包含一个子目录
wqqq
包含一个文件或子目录
ffff
,则打印True。这样可以避免与反斜杠混淆

如果您希望让您的代码只在Windows上执行此检查(并且在所有其他平台上具有非常不同的语义),您可以使用

print os.path.exists(r'dsa\wqqqq\ffff')
字符串文本中的前导
r
告诉Python编译器避免解释其中的反斜杠(但是,不要尝试用反斜杠结束此类文本,因为反斜杠仍然用于转义引号)。或:

把反斜杠叠起来是有效的。还请注意:

print os.path.exists('dsa/wqqqq/ffff')
使用普通斜杠而不是反斜杠,在Windows和其他地方都可以正常工作(这使得想要在这里使用反斜杠特别荒谬,除非有人故意试图获得一个在非Windows机器上运行异常的程序)


在编写代码后,您在文本中提出的另一个简单得多的问题更简单:
os.path.exists('what')
,在任何平台上,如果当前工作目录中有名为
what
的文件或子目录,则打印True。

如果路径存在,则打印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
%mkdir-p dsa/wqqq/ffff
%cat a=os.path.join('dsa'、'wqqqq'、'ffff')
>打印
>打印操作系统路径存在('dsa/wqqqq/ffff')
>EOF
dsa/WQQQ/ffff
真的
% 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