2

我有一个文本文件,其中有几个变量。它们中的大多数都在我的 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 很陌生。这是我的第一个程序。

4

3 回答 3

1

错误是eval抱怨它的内容value_string没有任何意义。

真正的错误是使用eval。(关于陷阱的好帖子可以在这里找到。)你甚至不需要在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 ==?
于 2013-07-22T03:04:10.607 回答
0

eval抛出错误,value_string在使用前需要定义 's 的值(应该是一个变量)。

于 2013-07-21T22:08:54.277 回答
0

您收到错误是因为您的 thefile.txt 文件中有一行:

测试 = ABC

将在 python 中进行评估,因为 TEST 将被分配给变量 ABC 的值,但您没有定义 ABC。

您可以制作一个字典来存储您的值对......这将适用于字符串值:

variables = {}
accepted = ['THISVARIABLE', 'ANOTHERONE']
...
if varname in accepted:
    variables[varname]=value
于 2013-07-21T22:00:47.473 回答