【问题标题】:Return value of os.path in PythonPython中os.path的返回值
【发布时间】: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

【问题讨论】:

    标签: python path


    【解决方案1】:

    '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 编译器避免解释其中的反斜杠(但是,不要尝试用反斜杠end这样的文字, 因为反斜杠 is 仍然被用来转义引号)。或者:

    print os.path.exists('dsa\\wqqqq\\ffff')
    

    加倍反斜杠有效。另请注意:

    print os.path.exists('dsa/wqqqq/ffff')
    

    使用普通斜杠而不是反斜杠,在 Windows 和其他地方都可以正常工作(这使得想要在这里使用反斜杠特别荒谬,除非有人故意试图获得一个在非 Windows 机器上表现怪异的程序)。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2023-03-12
          • 2013-12-24
          • 2013-04-05
          • 2011-10-23
          • 2019-12-19
          • 1970-01-01
          • 2014-05-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多