在Python中使用文本文件接收变量的字符串,而不定义它
我有一个文本文件,其中有几个变量。它们中的大多数都在我的Bash脚本中使用,但我希望在Python脚本中使用相同的文本文件。对于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)
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
是否为空?(这就是示例代码分配给的…)它是空的。我不明白为什么。我一定是错过了什么。