оказалось компилить не обязательно(если не мильён итераций), оно все равно кешируется первый раз при вызове глобальной функции
может регулярка не оптимальная, ты хоть на выходе результат правильный получаешь?
PS: кстати точки экранировать надо
#!/usr/bin/env python3 import re ifname = 'file.txt' pat = r';(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3});' lst = [] with open(ifname, encoding='utf-8') as fin: for line in fin: match = re.search(pat, line) match and lst.append(match.group(1)) print(lst[:10]) print(len(lst))
[guest@localhost txtip]$ head -5 file.txt
12345;127.0.0.1;6789
12345;192.168.0.1;6789
12345;192.168.0.2;6789
12345;192.168.0.3;6789
12345;127.0.0.1;6789
[guest@localhost txtip]$ wc file.txt
9600 9600 216000 file.txt
[guest@localhost txtip]$ ./txtip.py
['127.0.0.1', '192.168.0.1', '192.168.0.2', '192.168.0.3', '127.0.0.1', '192.168.0.1', '192.168.0.2', '192.168.0.3', '127.0.0.1', '192.168.0.1']
9600
[guest@localhost txtip]$
#!/usr/bin/env python3 import re ifname = 'file.txt' pat = r';(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3});' with open(ifname, encoding='utf-8') as fin: lst = [i.group(1) for i in filter(None, map(re.compile(pat).search, fin))] print(lst[:10]) print(len(lst))
aborodinНу так и IPv6 может быть :)
Lexander, есть не нулевая вероятность что может появиться “лишний” разделитель в текстовом поле
aborodinЕсли это НЕ ежесекундно поступающие данные из внешнего источника, то - все в память и не мучиться.
3. 832350 байт