繁体   English   中英

无法在 Python 中腌制 `re.finditer` 的 output

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM