[英]Cannot pickle output of `re.finditer` in Python
我在腌制re.finditer
输出的 output 时遇到问题。
这是一个MWE:
import re
import pickle
s = 'Hi my name is John'
out = re.finditer('John',s)
pickle.dump(out, open('re.pkl','wb'))
我收到以下错误:
TypeError: cannot pickle '_sre.SRE_Scanner' object
知道如何保存这个 object 吗? 我也没有运气使用pickle.dump(list(out), open('re.pkl','wb'))
这次的错误是
TypeError: cannot pickle 're.Match' object
我正在使用 Python 3.8.3
因为你得到一个迭代匹配对象的迭代器,所以匹配对象没有__getstate__
和__setstate__
因此不能被腌制,整个迭代器不能被腌制。
可以在此处找到有关此主题的更多信息: https://docs.python.org/3/library/pickle.html#pickle-picklable
以下是对所需对象的进一步说明: https://docs.python.org/3/library/re.html#match-objects
将 pickle 与匹配对象一起使用的示例:
import re
import pickle
s = 'Hi my name is John'
matches = []
out = re.finditer('John', s)
for m in out:
matches.append((m.start(), m.end(), m.group(0))
pickle.dump(matches, open('re.pkl', 'wb'))
另一种解决方案是实施__getstate__
和__setstate__
来帮助酸洗过程,这将需要您创建自定义 class 并实施此 function,这对于这种情况似乎过于复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.