【问题标题】:How to import line from txt file and make it a variable value python?如何从txt文件导入行并使其成为变量值python?
【发布时间】:2018-08-09 06:01:53
【问题描述】:

我有一个 test.txt 文件,现在有 2 行

not False == True
not True == True

我正在尝试将其导入到我的函数中,以便它将显示带有输入的文本,然后实际进行布尔计算 然后对每一行再做一次。它适用于第 6 行的输入,但第 7 行不起作用,我知道为什么,我只是不知道如何去做我想做的事情......

def calc (read):
    line = read.readline()

    if line:
        lines = line.strip()
        input(f"Does {lines}?>")
        print(f"{lines}")
        return calc(boolfile)

boolfile = open("test.txt")
calc(boolfile)

【问题讨论】:

  • 错误是什么?请问您能更具体地说明要求吗?
  • 从正确缩进代码开始。然后解释“不起作用”是什么意思。
  • 递归是怎么回事?
  • 如果你想像计算源代码一样评估字符串中的表达式,你必须在字符串上调用eval。为什么这是一个坏主意有很多原因,但如果这真的是你想要做的,那就是这样做的方法。
  • 第 7 行 print(f"{lines}") 只打印 "not False == True" 当我希望它实际执行 print(f"{not False == True}")并打印“真”

标签: python python-3.7


【解决方案1】:

f-strings 只能计算源代码中的表达式,在 f-string 内。

如果您想评估包含表达式表示的字符串,就好像它是源代码一样,您需要使用eval

eval 几乎总是一个坏主意有很多原因(tl;dr:任何可以更改您传递给eval 的输入的人都可以让您运行他们想要的任何代码)。但如果这真的是你想要做的,那就是这样做的方法:

if line:
    lines = line.strip()
    input(f"Does {lines}?>")
    print(eval(lines))

如果你想做一些更安全的事情,你唯一能做的就是将代码解析和解释为比“任何 Python 表达式”更安全的东西。这并不像听起来那么难(特别是因为如果你的语言是 Python 的一个精确子集,你可以使用 ast 模块来进行解析,你只需要编写解释器部分),但这并不完全是单线。

【讨论】:

【解决方案2】:

您似乎在寻找eval。 试试这个:

def calc (read):
    line = read.readline()

    if line:
        lines = line.strip()
        input(f"Does {lines}?>")
        print(eval(lines))
        return calc(boolfile)

boolfile = open("test.txt")

calc(boolfile)

输出:

Does not False == True?>
True
Does not True == True?>
False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2019-10-24
    • 2019-12-30
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多