文本操作以形成方程式



a=0.77,b=0.2,c=0.20,d=0.79,z=(c+d(,e=(z*a(,输出=(z+e(

我有一个类似上面的文本文件。我需要一个解析器逻辑,它会抛出一个等式输出=(0.20+0.79(+(0.20+0.99(*a(有哪些有效的方法?有图书馆吗?非常感谢。

Primitive方法是处理字符串并使用replace()


首先使用split(',')将字符串转换为列表

['a=0.77 ', 'b=0.2 ', 'c=0.20', ' d=0.79 ', 'z=(c+d)', ' e=(z*a) ', 'output=(z+e)']

接下来使用.strip()删除结尾和开头的空格。

接下来,对每个元素使用.split('=')来创建嵌套列表。

[['a', '0.77'], ['b', '0.2'], ['c', '0.20'], ['d', '0.79'], ['z', '(c+d)'], ['e', '(z*a)'], ['output', '(z+e)']]

接下来使用dict()创建字典。

{'a': '0.77',
'b': '0.2',
'c': '0.20',
'd': '0.79',
'e': '(z*a)',
'output': '(z+e)',
'z': '(c+d)'}

现在,您可以获得第一个对字典中的其他项运行.replace('a', '0.77(`的'a' : '0.77。并将其与字典中的其他值重复。

所以最后你可以得到字典

{'a': '0.77',
'b': '0.2',
'c': '0.20',
'd': '0.79',
'e': '((0.20+0.79)*0.77)',
'output': '((0.20+0.79)+((0.20+0.79)*0.77))',
'z': '(0.20+0.79)'}

并且CCD_ 8具有字符串CCD_


import sympy
import pprint
text = 'a=0.77 ,b=0.2 ,c=0.20, d=0.79 ,z=(c+d), e=(z*a) ,output=(z+e)'
parts = text.split(',')                     # create list
#print(parts)
parts = [item.strip() for item in parts]    # remove spaces
#print(parts)
parts = [item.split('=') for item in parts] # create tuples
#print(parts)
parts = dict(parts)                         # create dict
#print(parts)
pprint.pprint(parts)
for key1, val1 in parts.items():
for key2, val2 in parts.items():
parts[key2] = parts[key2].replace(key1, val1)
pprint.pprint(parts)
print('output:', parts['output'])

最新更新