在Python中使用文本文件接收变量的字符串,而不定义它

在Python中使用文本文件接收变量的字符串,而不定义它,python,variables,text,Python,Variables,Text,我有一个文本文件,其中有几个变量。它们中的大多数都在我的Bash脚本中使用,但我希望在Python脚本中使用相同的文本文件。对于Python格式不正确的行,我希望我的脚本忽略它们。对于那些格式正确的,我希望脚本检查,如果它是我正在寻找的变量-使用它 导入系统 进口稀土 for ln in open("thefile.txt"): m = re.match(r"(?P<varname>[^=]*)\s*=\s*(?P<value>.+)", ln)

我有一个文本文件,其中有几个变量。它们中的大多数都在我的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
对于打开的ln(“thefile.txt”):
m=re.match(r“(?P[^=]*)\s*=\s*(?P.+)”,ln)
如果m:
varname=m.group(“varname”)
value_string=m.group(“value”)
value=eval(值\字符串)
打印值
#因此,如果变量名为thisviable,则获取该值:
如果varname==“THISVARIABLE”:
mypythonvariable==值
我得到以下错误:

name错误:未定义名称“Somevariableinmytextfile”

Somevariableinmytextfile是该文件中的第一个变量

我的问题:


为了消除这个错误,我必须定义txt文件中的每个变量吗?如果没有,我该怎么办?我对Python非常陌生。这是我的第一个程序。

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

测试=ABC

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

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

variables = {}
accepted = ['THISVARIABLE', 'ANOTHERONE']
...
if varname in accepted:
    variables[varname]=value

eval抛出错误,使用前需要定义
值\u字符串的值(应为变量)

错误是
eval
抱怨
value\u string
的内容没有任何意义

真正的错误是使用
eval
。(可以找到一个关于陷阱的好帖子。)你甚至不需要在这里
求值
-将
value\u string
作为正则表达式给你的字符串就可以了

当前方法的问题 示例
thefile.txt

foo=bar
baz=42
quux=导入操作系统;操作系统关闭()
  • 在解析
    foo
    时,Python抱怨没有定义
    bar
    。(很简单。)
  • 当解析
    bar
    时,Python会给您一个
    int
    ,而不是
    str
    。(没有真正的问题……)
  • 当解析
    qux
    时,Python会关闭计算机。(啊哦!)
为什么不需要
eval
你想要一个字符串值,对吗?正则表达式已经给了你一个字符串

varname = m.group("varname")
value = m.group("value")
print value
if varname == "THISVARIABLE":
    mypythonvariable = value # You meant = instead of ==?

你得到的实际错误是什么?我怀疑它的字面意思是
'Somevariableinmytextfile'
。我想这是因为你使用了
eval
。你能给我们展示一下file.txt中的一些示例行吗?“somevariable…”是我列表中的第一个变量。目前的“infothing”是file.txt中的几个示例(每行一个,尽管我不能在这里换行):infothing=/home/box/infonumber=125I的意思是=(分配)而不是==(比较)。对非常感谢你的回答@PaoloVacirca这段代码和我的修复程序在Python2.7.3(WinRT)上运行得很好。它是空的。在我这一方,还有别的问题。我想弄清楚是什么。:)@PaoloVacirca可能会检查
mypythonvariable
是否为空?(这就是示例代码分配给的…)它是空的。我不明白为什么。我一定是错过了什么。