【问题标题】:Cannot pickle output of `re.finditer` in Python无法在 Python 中腌制“re.finditer”的输出
【发布时间】:2020-10-07 02:28:11
【问题描述】:

我在腌制re.finditer 输出时遇到问题。

这是一个 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

知道如何保存这个对象吗? 我也没有运气使用pickle.dump(list(out), open('re.pkl','wb'))

这次的错误是

 TypeError: cannot pickle 're.Match' object

我正在使用 Python 3.8.3

【问题讨论】:

    标签: python pickle re


    【解决方案1】:

    因为你得到了一个迭代匹配对象的迭代器,匹配对象没有__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__ 来帮助酸洗过程,这将需要您创建一个自定义类并实现此功能,这对于这种情况来说似乎过于复杂。

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多