尝试在泡菜文件中加载类时出错

时间:2020-11-12 09:11:34

标签: python pickle

在我的主要代码中,我定义了一个类:

ln -s /usr/local/Cellar/gcc\@5/5.5.0_6/bin/gcc-5 /usr/local/bin/gcc
ln -s /usr/local/Cellar/gcc\@5/5.5.0_6/bin/gfortran-5 /usr/local/bin/gfortran
ln -s /usr/local/Cellar/gcc\@5/5.5.0_6/lib/gcc/5/libgfortran.3.dylib /usr/local/lib/libgfortran.3.dylib
ln -s /usr/local/Cellar/gcc\@5/5.5.0_6/lib/gcc/5/libquadmath.0.dylib /usr/local/lib/libquadmath.0.dylib

此后,我定义了一个变量,它将包含该类的所有信息:

class flowsprop:
    
    def __init__(self, name_nozzle, mach_jet, u_jet, uc, baseflowtype, d_jet, ts_jet, c_jet, kh, ka, gamma,
    Re, Pr, m_lst, baseflowpath, baseflowanafit, baseflowsubfolder,baseflowfile,m):
        
        self.name_nozzle = name_nozzle 
        self.mach_jet = mach_jet
        self.u_jet = u_jet
        self.uc = uc
        self.baseflowtype = baseflowtype
        self.d_jet = d_jet
        self.ts_jet = ts_jet
        self.c_jet = c_jet
        self.kh = kh 
        self.ka = ka
        self.gamma = gamma
        self.Re = Re
        self.Pr = Pr 
        self.m_lst = m_lst
        self.baseflowpath = baseflowpath
        self.baseflowanafit = baseflowanafit
        self.baseflowsubfolder = baseflowsubfolder
        self.baseflowfile = baseflowfile
        self.m = m

在代码编写过程中,我使用了很多功能,其中包含flowsrc = flowsprop('dummy',mach_jet,0.0,0.0,baseflowtype_str,d_jet,flowamb.ts_amb,flowamb.c_amb,np.nan,0.0,gamma, Re,Pr,m_lst,baseflowpath,baseflowanafit,baseflowsubfolder,baseflowfile,m) 信息,例如:flowsrcflowsrc.mflowsrc.baseflowfile等 我想保存flowsrc.baseflowsubfolder的所有信息以在另一个代码中使用,所以我使用flowsrc

pickle command

现在的问题是当我以新代码加载此文件时:

import pickle

# Save data
    result_dict = {
    'flowsrc_stability':flowsrc}

# filename and path
filename = specsanalysis.pathoutput+'results_pse_st'+st_str+'_m'+str(m)+'.pickle'

with open(filename, 'wb') as handle:
    pickle.dump(result_dict, handle)

错误:

import pickle 

filename = '/projects/jet_noise_wavepacket/10_CODE/50_PHD_MATEUS/PSE_Python/output/output-20201109-1730/results_pse_st040_m0.pickle'

with open(filename, 'rb') as handle:
    new_dict = pickle.load(handle)

我认为我必须在新代码的开头导入Traceback (most recent call last): File "test.py", line 6, in <module> new_dict = pickle.load(handle) File "/share/giseh_fr0_prod/anaconda/2/RedHatEL-7/x86_64/lib/python2.7/pickle.py", line 1384, in load return Unpickler(file).load() File "/share/giseh_fr0_prod/anaconda/2/RedHatEL-7/x86_64/lib/python2.7/pickle.py", line 864, in load dispatch[key](self) File "/share/giseh_fr0_prod/anaconda/2/RedHatEL-7/x86_64/lib/python2.7/pickle.py", line 1096, in load_global klass = self.find_class(module, name) File "/share/giseh_fr0_prod/anaconda/2/RedHatEL-7/x86_64/lib/python2.7/pickle.py", line 1132, in find_class klass = getattr(mod, name) AttributeError: 'module' object has no attribute 'flowsprop' ,但是如果这样做,那么新代码将先运行所有旧代码,然后再运行新代码,我想避免这种情况。 将flowsprop的信息保存在泡菜文件中最简单/最好的方法是什么?

0 个答案:

没有答案