我是Python的新手,正在攻读我的学位的最终项目。我想写一个Python脚本,它将读取数值(如:21,23,28等)并将其与脚本中的值进行比较。如果值匹配,则应执行另一个python脚本。一切似乎都正常工作,但文件中的红色值在条件匹配方面没有变化。每次执行语句ELSE而不是IF时,脚本都是真的。
这是我的代码:
import time
import sys
import os
check_period = 2
fo = open("/home/pi/thermometer1.txt", "r+")
str = fo.readline();
fo.close()
while True:
fo = open("/home/pi/thermometer1.txt", "r+")
str = fo.readline();
if str < 25 :
os.system("python /home/pi/servo/servo1/servo6.py")
print str
fo.close()
else:
os.system("python /home/pi/servo/servo1/servo1.py")
print str
fo.close()
time.sleep(check_period)
另外一个问题是如何编辑这个脚本,将一个.txt文件与数值相比较。 23到其他.txt文件,数值如。 27并且如果满足条件则执行另一个python脚本(类似于上面的代码)。提前感谢所有评论。
答案 0 :(得分:2)
从文件中读取你得到的字符串,而不是整数。由于它们是不同的(不可比的)类型,因此根据类型 1 进行任何比较都会产生一致但任意的值。显然,字符串被认为大于整数(对于Cpython - 其他实现可能表现不同)。
您需要在字符串中构造一个整数:
int_from_str = int(fo.readline())
虽然我们在这里,但有更好的方法来迭代文件:
with open("/home/pi/thermometer1.txt") as fin:
for line in fin:
int_from_str = int(fin)
...
1 在python3.x上,==
以外的任何比较都会引发异常。
答案 1 :(得分:0)
当你从文本文件中读取时,你会得到字符串。与int比较的字符串将始终计算为False
。而不是
str = fo.readline()
将字符串类型存储在str
中,执行
str = int(fo.readline())
但请注意,如果该行包含的值不能为int
,则会出现错误。
顺便说一句,你不需要在代码中的任何行之后加上分号,并且应该避免使用变量名str
,因为它是Python内置类型。