У меня есть namedtuple внутри класса. При травлении с использованием укропа, он жалуется на классическую проблему неспособности найти объект namedtuple в верхнем модуле.Python dill: 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
Я не уверен, если есть какой-нибудь выход. Else придется прокладывать путь по пути только до nit - выберите dataframes для маринования, что я ненавижу делать.
Любая помощь очень ценится.
Привет, я автор 'dill'. Я думаю, что проблема может быть такой: https://github.com/uqfoundation/dill/issues/132. С 'dill',' namedtuple' рассолки довольно хорошо, если он не называется «плохо». В принципе, если вы назовете его, как показано в приведенной выше проблеме, используйте ссылку указателя для того, что вы хотите, что может просто «работать». Ключ имеет нулевой аргумент так же, как '__name__'. –
@MikeMcKerns благодарит за ответ. Я не уверен - у меня нет «плохого» наименования. я попробовал - TM = namedtuple ('ТМ', tmeas_fields) ТМ .__ name__ = "ТМ" печати ТМ выход: <класс '__main __ TM.>. pickle.PicklingError: Can not pickle: он не найден как __main__.TM –
rrkarts