Python检查文件是否存在(返回false,应该返回true)

时间:2016-12-07 15:04:19

标签: python

我有以下代码行:

tfPath = '\"' + os.environ["ProgramFiles(x86)"] + '\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe\"'
if not os.path.exists(tfPath):
    tfPath = 'TF.exe'
cmd_str = '\"' + tfPath + ' checkout ' + '\"Files_to_checkout\"\"'

我使用"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe"中描述的文件进行了测试。但我的代码总是跳进真正的分支,因此它从未承认该文件实际存在。那里我做错了什么?

注意,出于测试目的,我使用原始os.system(cmd_str)执行了tfPath,该工作正常,因此文件存在,可以访问,但path.os.exists每次都返回false时间。

2 个答案:

答案 0 :(得分:1)

尝试删除第一次分配给tfPath的额外引号。您需要在系统调用中使用它们以保持嵌入空间的路径不被shell拆分。但是对os.path.exists的调用并不需要它引用;事实上,我认为它会对待'''作为文件名的一部分,不存在。

tfPath = os.environ["ProgramFiles(x86)"] + '\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe'
if not os.path.exists(tfPath):
    tfPath = 'TF.exe'
cmd_str = '\"' + tfPath + ' checkout ' + '\"Files_to_checkout\"\"'

不确定出了什么问题。尝试:

tfPath = os.path.join(os.environ["ProgramFiles(x86)"], 
    r'Microsoft Visual Studio 12.0\Common7\IDE\TF.exe')
if os.path.exists(tfPath):
    print('tfPath={} exists'.format(tfPath))
else:
    print('tfPath={} does not exist'.format(tfPath))

(修复了\\\替换的错误复制/粘贴错误,因此我添加了一个原始字符串r''指示符,因此上面的代码段可以直接使用。还包含建议来自GreenMat,我使用+替换字符串连接并调用os.path.join

答案 1 :(得分:0)

编辑回答:测试表明您提供的代码产生以下路径名:

  

" C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ TF.exe"

换句话说,您构建的路径名包含双引号。但是,它们不在实际的路径规范中。这就是您的代码无法找到所需文件的原因。

使用os.path.join

构建路径名更加pythonic且不易出错

应该看起来像这样:

tfPath = os.path.join(os.environ["ProgramFiles(x86)"], 'Microsoft Visual Studio 12.0', 'Common7', 'IDE', 'TF.exe')