我有一个文本文件,其中有几个变量。其中大部分用于我的 Bash 脚本,但我想为我的 Python 脚本使用相同的文本文件。对于 Python 格式不正确的行,我希望我的脚本忽略。对于格式正确的那些,我希望脚本检查它是否是我正在寻找的变量 - 使用它。
导入系统 导入重新
for ln in open("thefile.txt"):
m = re.match(r"(?P<varname>[^=]*)\s*=\s*(?P<value>.+)", ln)
if m:
varname = m.group("varname")
value_string = m.group("value")
value = eval(value_string)
print value
# so if the variables name is THISVARIABLE, get that value:
if varname == "THISVARIABLE":
mypythonvariable == value
我收到以下错误:
NameError: 名称 'Somevariableinmytextfile' 未定义
Somevariableinmytextfile 是该文件中的第一个变量。
我的问题:
是否必须在 txt 文件中定义每个变量才能消除此错误?如果没有,我该怎么办?我是 Python 的新手。这是我的第一个程序。
请您参考如下方法:
错误是 eval 提示 value_string 的内容没有任何意义。
真正的 错误完全是使用eval。 (可以找到关于陷阱的好帖子 here。)您甚至不需要在此处eval - 将 value_string 保留为正则表达式给你的字符串就好了。
当前方法的问题
示例 thefile.txt:
foo=bar
baz=42
quux=import os; os.shutdown()
- 当解析
foo时,Python 提示bar没有定义。 (简单。) - 当解析
bar时,Python 给你一个int而不是str。 (没有真正的问题...) - 当解析
quux时,Python 会关闭您的计算机。 (呃哦!)
为什么不需要eval
你想要一个字符串值,对吗?正则表达式已经为您提供了一个字符串!
varname = m.group("varname")
value = m.group("value")
print value
if varname == "THISVARIABLE":
mypythonvariable = value # You meant = instead of ==?
