Python中os.path的返回值

2024-05-12 17:44:27 发布

您现在位置:Python中文网/ 问答频道 /正文

对于此代码:

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


Tags: path代码importtrueosexiststhiswhat
3条回答

如果路径存在,它将打印为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

Return True if path refers to an existing path. Returns False for broken symbolic links. On some platforms, this function may return False if permission is not granted to execute os.stat() on the requested file, even if the path physically exists.

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

'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包含一个子目录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计算机上行为怪异的程序)。

在代码之后,您在文本中提出的更简单的其他问题更简单:在任何平台上,如果当前工作目录中有一个名为what的文件或子目录,则打印为True。

相关问题 更多 >