【问题标题】:Read numeric value from txt. file and compare it to condition Python从 txt 读取数值。文件并将其与条件 Python 进行比较
【发布时间】:2013-04-29 14:47:53
【问题描述】:

我是 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 脚本(类似于上面的代码)。在此先感谢所有 cmets。

【问题讨论】:

  • 你那里似乎有一个无限循环。这是故意的吗?

标签: python if-statement


【解决方案1】:

从文件中读取得到的是字符串,而不是整数。由于它们是不同的(不可比较的)类型,因此您所做的任何比较都会根据类型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 上,== 以外的任何比较都会引发异常。

【讨论】:

  • “由于它们是不同的(不可比较的)类型,所以您进行的任何比较都将始终返回 False。”实际上,它会根据类型名称的字母排序顺序返回True 或False:例如int 总是小于str,因为"int" &lt; "str"。正如你所说,这种愚蠢在 Python 3 中消失了。
  • @kindall -- 对。我知道我忘记了什么。我已经更新以更正它。感谢您指出这一点。
  • @kindall 这仅适用于未实现tp_compare 的C 类。如果您在 python 中创建一个新类,那就不再适用了:class c(object): def __lt__(self, other): return NotImplemented 5 &lt; c() -&gt; True 即使"int" &gt; "c"。在这种情况下,我相信 CPython 使用对象 id 进行比较。
  • @Bakuriu -- 你可能对 Cpython 是正确的。归根结底,这里的顺序是一致的(使用相同的解释器,你会得到相同的结果),但它是任意的(使用不同的解释器,你可能会得到不同的结果)。除非你能向我证明你有一个非常好的理由,否则深入挖掘它是不值得的(此时我可能会试图说服你真正好的理由是'毕竟t非常好);-)。
【解决方案2】:

当您从文本文件中读取时,您会得到字符串。与 int 比较的字符串将始终评估为 False。而不是

str = fo.readline()

在str中存储一个字符串类型,做

str = int(fo.readline())

但请注意,如果该行包含不能是int 的值,则会收到错误消息。

顺便说一句,您不需要在代码中的任何行之后放置分号,并且应该避免使用变量名称 str,因为它是 Python 内置类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多