在我的代码中,我试图通过使用linecache读取行和if语句来检查配置文件的特定行,看它是否为True,但由于某种原因它拒绝工作。
我简化了代码以便对其进行测试。
import linecache
d = linecache.getline('logconfig.dat', 2)
print(d)
if d == True:
doeslock = True
else:
doeslock = False
print(doeslock)
无论我尝试什么,print(d)
都会打印True
,print(doeslock)
会打印False
。我甚至尝试使用字母和字符串而不是bools。仍然没有工作。我在这里缺少什么?
先谢谢你们
编辑:
当我使用字符串进行比较时,我用y替换了文件中的True
并修改了if语句以查看d
变量是否为'y'
编辑2:
好的,我发现了这个问题。无论出于何种原因,都会将linecache返回到我想要的行和前一行。我将配置分成两个文件,现在它工作正常。不知道是什么导致了这种情况发生但是哦。谢谢你的帮助!
答案 0 :(得分:3)
当您从文件中读取一行时,您将整个行(包括换行符)作为字符串。您应该将其删除,然后与另一个字符串进行比较:
if d.strip('\n') == "True":
答案 1 :(得分:1)
该字符串与布尔值不同。考虑:
>>> d = 'True'
>>> print(d)
True
>>> if d == True:
... doeslock = True
... else:
... doeslock = False
...
>>> print(doeslock)
False
>>> bool('False')
True
你可能想要的是:
import linecache
d = (linecache.getline('logconfig.dat', 2)).strip()
print(d)
doeslock = (d == 'True')
print(doeslock)
还要考虑以下事项:
>>> with open('randfile', 'w') as whatever:
... whatever.write('y')
...
>>> import linecache
>>> d = linecache.getline('randfile', 1)
>>> print(d)
y
>>> d == 'y'
False
>>> 'y' in d
True
>>> d.strip() == 'y'
True
答案 2 :(得分:0)
linecache.getline
返回一个字符串,而不是布尔值。因此,您必须将d
与"True"
进行比较。如果有空格或换行符,您也可能需要去除getline的结果。
>>> if d=="True":
... print 'ok'
...
ok
答案 3 :(得分:0)
尝试d.strip()==' True': 可能你有一个额外的空间或\ n。
答案 4 :(得分:0)
导入linecache
d = linecache.getline('logconfig.dat',2)
打印(d)
如果d:
doeslock = True
否则:
doeslock = False
打印(doeslock)