从文本文件返回布尔值

时间:2018-07-11 11:00:21

标签: python python-3.x if-statement boolean

尝试编写多个脚本,这些脚本将访问一个文本文件以从所述文本文件中检索其切换值,然后返回值为false并将其更改为true,反之亦然。

值总是返回为false,不确定我丢失了什么,但这是文本文件:

1
False
3
True
5
6
7
8
9

这是源代码:

def append():
  with open('values', 'r') as file:
      # read a list of lines into data
      data = file.readlines()
  # now change the line
  re_value = value

  data[1] = re_value+"\n"
  # and write everything back
  with open('values', 'w') as file:
      file.writelines(data)
  print("value changed to "+re_value)

def read() -> bool:
  #opens the value file to find the value of the toggle
  f=open("values", "r")

  for x, line in enumerate(f):
      if x == 1:
          toggle = line
          print(toggle)
          return toggle
  f.close()


toggle = read()

if toggle:
    print("Light is on turn it off")
    #runs command to turn off the light
    #runs command to change value for light
    value = "False"
    append()
else:
    print("Light is off turn it on")
    #runs command to turn on the light
    #runs command to change value for light
    value = "True"
    append()

4 个答案:

答案 0 :(得分:1)

好像您用来评估条件的布尔值是一个字符串。

在这种情况下,您可以将其保留为字符串:

if value == "True":
    print "Condition is true!"

或实施类似的操作:

def str2bool(v):
  return v.lower() in ("true",) # you can add to the tuple other values that you consider as true if useful

print str2bool(value)

答案 1 :(得分:0)

尝试以下方法进行切换:

putback=[]
with open('values', 'r') as file:
    for e in file.readlines():
        if e=='True' or e=='False':
            print(e)
            putback.append(not e)
        else:
            putback.append(e)
with open('values','w') as file1:
     file.write('\n'.join(putback))

答案 2 :(得分:0)

找到我的错人,谢谢您的帮助,将if语句更改为

if toggle=="True\n":
    print("Light is on turn it off")
    #runs command to turn off the light
    #runs command to change value for light
    value = "False"
    append()

它是多行文本文档,因此缺少新行标签

答案 3 :(得分:0)

据我了解,您想将True更改为False,将False更改为True,其余部分保持不变。

final_output = []
with open("values") as file:
    data = file.readlines()

for line in data:
    line = eval(line.strip())
    if isinstance(line, bool):
        print("Value is {0} Changing to {1}".format(line, not line))
        final_output.append(not line)
    else:
        final_output.append(line)

with open("values", 'w') as file:
    file.write("\n".join([str(line) for line in final_output]))