我在課堂裏有namedtuple。當使用蒔蘿進行酸洗時,它會抱怨無法在頂層模塊中找到指定的對象的經典問題。Python蒔蘿:Pickle namedtuple似乎不起作用
import dill as pickle
class NNRTMParse(object):
def __init__(self,logfile)):
.
.
.
.
self.TM = namedtuple('TM',tmeas_fields)
#print self.TM
CFH = namedtuple('CFH',cfhdr_fields)
PM = namedtuple('PM',pmeas_fields2)
print PM
這是self.TM和其他的默認賦值,我動態分配namedtuple當我解析日誌。
但酸洗:
if __name__ == "__main__":
filename = 'dbggen_rx_loc_2-llh_rtm_lla_out_20160929_130711_day2_4381_JN2_SN64_rtmproc_2M5M.txt'
N = NNRTMParse(filename)
N.parse()
N.get_rx_loc('oak484_bora-llh')
filehandler = open("NNRTMParse_JB2-SN052.obj","wb")
pickle.dump(N,filehandler)
filehandler.close()
Traceback (most recent call last):
File "C:/NN_Hardware/spos_proc/NNRTMParse.py", line 937, in <module>
pickle.dump(N,filehandler)
File "C:\Python27\lib\site-packages\dill\dill.py", line 236, in dump
pik.dump(obj)
File "C:\Python27\lib\pickle.py", line 224, in dump
self.save(obj)
File "C:\Python27\lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "C:\Python27\lib\pickle.py", line 419, in save_reduce
save(state)
File "C:\Python27\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python27\lib\site-packages\dill\dill.py", line 835, in save_module_dict
StockPickler.save_dict(pickler, obj)
File "C:\Python27\lib\pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems
save(v)
File "C:\Python27\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python27\lib\site-packages\dill\dill.py", line 1189, in save_type
StockPickler.save_global(pickler, obj)
File "C:\Python27\lib\pickle.py", line 748, in save_global
(obj, module, name))
pickle.PicklingError: Can't pickle <class '__main__.TM'>: it's not found as __main__.TM
我不知道是否有任何出路。否則就不得不通過路徑來挑選數據框來醃菜,我討厭這樣做。
任何幫助非常感謝。
嗨,我是'蒔蘿'作者。我認爲這個問題可能是這樣的:https://github.com/uqfoundation/dill/issues/132。用'dill',一個'namedtuple'鹹菜很好,只要它沒有被命名爲「糟糕」。基本上,如果您按照上述問題的名稱命名,則可以使用指針參考來獲得您想要的內容,這可能只是「正常工作」。關鍵是第零個參數與__name__相同。 –
@MikeMcKerns感謝您的回覆。我不確定 - 我沒有「壞」命名。 我試圖 - TM = namedtuple( 'TM',tmeas_fields) TM .__ name__ = 「TM」 打印TM 輸出: <類 '__main __ TM。'>。 pickle.PicklingError:Can not pickle:找不到__main__.TM –
rrkarts