2012-09-14 105 views
0

打开一个文件进行读取所以我有问题,所以我决定只是尝试的os.isfile断言:Python的os.isfile断言失败

from Android_API_Parser import Android_API_Parser 
import os.path 

assert os.path.isfile("D:\Work\Python Workspace\Android_API_Parser\test.txt") 

tester = Android_API_Parser() 
tester.setFile("test.txt") 
tester.parse() 

它的失败断言:

Traceback (most recent call last): 
    File "D:\Work\Python Workspace\Android_API_Parser\src\Android_API_Tester.py", line   
    9, in <module> 
assert os.path.isfile("D:\Work\Python Workspace\Android_API_Parser\test.txt") 
AssertionError 

我已经打开的路径,我想打开该文件,并粘贴下面吧:

D:\Work\Python Workspace\Android_API_Parser\test.txt 

任何想法,为什么它甚至不及格断言?除非我真的很累,否则文件显然位于那里。我甚至用“/”和“\”来尝试,即使包含转义字符。

回答

3

string literal中,您必须使用另一个反斜杠来跳转反斜杠,使用原始字符串或使用正斜杠。否则,"\t"变成只包含制表符的字符串。

尝试任何的:

assert os.path.isfile("D:\\Work\\Python Workspace\\Android_API_Parser\\test.txt") 
assert os.path.isfile(r"D:\Work\Python Workspace\Android_API_Parser\test.txt") 
assert os.path.isfile("D:/Work/Python Workspace/Android_API_Parser/test.txt") 
assert os.path.isfile(os.path.join("D:", "Work", "Python Workspace", 
            "Android_API_Parser", "test.txt")) 

的文件也可能不是一个普通的文件。使用os.path.exists来查看它是否存在。

您也许没有足够的权限查看该文件或您期望的文件名may be localized。要进行调试,运行:

path = ["Work", "Python Workspace", "Android_API_Parser", "test.txt"] 
f = 'D:' 
for p in path: 
    f = os.path.join(f, p) 
    print(f) 
    assert os.path.exists(f) 
assert os.path.isfile(f) 
+0

我试过了,即使使用了反斜杠。 :/ 我试着单独运行所有这四个断言,并且它全部失败。 此外,我认为它可能不喜欢PATH名称中的空格,所以我摆脱了这一点,但它仍然不喜欢它。 – TSM

+0

@TSM:空间在这样的路径中完美无瑕。 philag的回答对于你发布的问题肯定是正确的。也许文件真的不在那里?你尝试过一个更简单的路径吗? –

+0

@TSM嗯,它不会与你发布的版本,这是肯定的。我用一个调试程序更新了答案。如果你运行它,你会得到什么输出? – phihag