在Python中从文本文件导入公式

在Python中从文本文件导入公式,python,function,import,Python,Function,Import,我有一个复杂的方程,它被生成到一个.txt文件中。我想导入这个方程(它是.txt文件中的所有文本),并从中生成一个函数,随后可以进行拟合 有人知道我该怎么做吗?要拟合的方程在最下面。我微弱的导入尝试如下 myfile1= open("dummyfile.txt", 'r') def fcn(J1,J2,T,k,g): return myfile1.read() “dummyfile.txt”内容: (2.0.0*0.0*g**2*sp.exp(2.0*J2/(T*k))+60.0*g

我有一个复杂的方程,它被生成到一个
.txt
文件中。我想导入这个方程(它是
.txt
文件中的所有文本),并从中生成一个函数,随后可以进行拟合

有人知道我该怎么做吗?要拟合的方程在最下面。我微弱的导入尝试如下

myfile1= open("dummyfile.txt", 'r') 
def fcn(J1,J2,T,k,g):
    return myfile1.read()
“dummyfile.txt”内容:

(2.0.0*0.0*g**2*sp.exp(2.0*J2/(T*k))+60.0*g**2*2*sp.exp(6.0*J2/(T*k//(T*k))+168.0*g**2*2*B.2*B.2*B.2*B+B.0*2*2*sp.exp(6.0*2.0*J2(6.0*J2(6.0.0*J2/(T*J2/(T*J2/(T*J2/(T*J2/(T*k)k)k))))+3.0.0.0.0*2.0*J2(6.0*2.0*J2//(T*J2/(T*J2/(T*J2/(T*J2/(T*k)k)k))))))))))+++++++++3.0.0.0.0)/(T*k))+180.0*g**2*sp.exp((8.0*J1+12.0*J2)/(T*k))(8.0*J1+22.0*J1+22.0*0.0*0.0*0*J2)7(T*k)k))+660.0*g**2*sp.0*g.0*g**2*0.0*0.0.0*J1+18.0*J1+18.0*J1+18.0*J1+18.0*J1+18.0+18.0+18.0+18.0+18.0+18.0.0*0*0*0*0*0*0*J1+18.0.0*0*0.0.0*0*0*0*0*0*0.0.0.0*0*0*J2*J2 10*0*J2*J2*J2 10.0.0.0.0.0.0.0*0*0*0*0*0*0*0*0*0*0.0.0.0.0.0.0*0*J2)J2)J2 J2)/(T*k))/(3*T*k*(6*sp.exp(2.0*J2/(T*k))+10*sp.exp(6.0*J2/(T*k))14*sp.exp(12.0*0*J2/(T*k)10.0*J2(T*k)k)、+5*sp.exp((2.0*J1+4.0*J1+4.0*J1+4.0*0*0.0*J1+4.0*0*0*0+4.0*J1+4.0*0*3.0*0*0*0*J2*J2)和(T*k)TK)以及(T*k)k)k)3+5+5*5*sp.exp(5*sp.exp(((2.0.0.0*J1+5.0*J1+5.0*J1+5*J1+1+1.0+1+1+1+1+4.0*J1+4.0+4.0+4.0+4.0+4.0+4.0+4.0+4.0+4.0+4.0+4.0*0*0+26*sp.exp((16.0*J1+26.0*J2)/(T*k))+13*sp.exp((18.0*J1+24.0*J2)/(T*k))+30*sp.exp((24.0*J1+32.0*J2)/(T*k))+17*sp.exp((32.0*J1+40.0*J2)/(T*k))+1))

您可以使用

代码: 测试代码: 文件1: 结果:
你应该看看,然后再重新考虑。为了理智起见,不要使用
eval
。但SymPy值得探索:如果您已经可以将其作为纯文本阅读,则不需要在程序中“阅读”它;只需将其复制到源代码中!提供正确的语法,即.Hello。当然,只需复制和粘贴文本就可以了,但是上面生成的方程式根据我告诉程序的关于我的系统的内容而有所不同。因此,跳过这一步并让程序直接执行更具吸引力
def build_function(filename):
    with open(filename, 'rU') as f:
        eqn = f.read().strip()
        exec("def fcn(J1, J2, T, k, g):\n return ({})".format(eqn))
        return locals()['fcn']
fcn = build_function('file1')
print(fcn(1, 2, 3, 4, 5))
J2 + T*k
14