Невозможно обработать вывод `re.finditer` в Python - PullRequest
0 голосов
/ 17 июня 2020

У меня проблемы с обработкой вывода 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

1 Ответ

3 голосов
/ 17 июня 2020

, потому что вы получаете итератор, который выполняет итерацию по объектам сопоставления , объекты сопоставления не имеют __getstate__ и __setstate__, поэтому не могут быть обработаны, весь итератор не может быть обработан.

Подробнее о эту тему можно найти здесь: https://docs.python.org/3/library/pickle.html#pickle -picklable

вот дальнейшее объяснение желаемых объектов: https://docs.python.org/3/library/re.html#match -objects

Пример использования рассола с объектами сопоставления:

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__, чтобы помочь процессу травления, это потребует от вас создания настраиваемого класса и реализации этой функции, которая кажется слишком сложно для этой ситуации

Надеюсь, что помогло

...