我使用Python来解析一些文件,结果发现其中一个文件本身就是一个Python脚本。我需要在列表中找到元素,并且列表是专门定义的。我正在解析的文件包含如下行:
THESE_VALUES = ["Value1", "vAlue2", "VaLUE4"]
我可以使用我的 Python脚本来解析此行中的"并获取每个单独的条目,但是这样做可能同样容易它在我的脚本中执行以创建我自己的THESE_VALUES
数组。这可能吗?
如果这是不可能的,或者是不明智的,那么获取这些字符串的最简单/最pythonic的方法是什么?
注意:此行完全受信任,我不需要担心执行错误/不正确的命令。
答案 0 :(得分:1)
您可以使用eval
,因为您完全信任您的输入(您已被警告过):
>>> s = 'THESE_VALUES = ["Value1", "vAlue2", "VaLUE4"]'
>>> eval(s.split('=', 1)[1])
['Value1', 'vAlue2', 'VaLUE4']
使用上面的代码,我们在第一个=
进行拆分,然后我们评估等号后面的表达式。
答案 1 :(得分:0)
如果我正确理解了这个问题,一旦你解析了字符串,就可以使用exec
来评估字符串作为python命令:
exec('THESE_VALUES = ["Value1", "vAlue2", "VaLUE4"]')
答案 2 :(得分:0)
你可以这样做:
def getValues(str_values):
l = locals()
exec(str_values)
return l['THESE_VALUES']
getValues('THESE_VALUES = ["Value1", "vAlue2", "VaLUE4"]')
答案 3 :(得分:0)
如果要解析以"THESE_VALUES = "
开头的行,可以在拆分后使用ast.literal_eval
:
from ast import literal_eval
with open("in.py") as f:
for line in f:
if line.startswith("THESE_VALUES"):
print(literal_eval(line.split("=",1)[1].strip()))
break
['Value1', 'vAlue2', 'VaLUE4']