Форум сайта python.su
47
оказалось компилить не обязательно(если не мильён итераций), оно все равно кешируется первый раз при вызове глобальной функции
может регулярка не оптимальная, ты хоть на выходе результат правильный получаешь?
PS: кстати точки экранировать надо
Отредактировано bismigalis (Окт. 10, 2013 17:04:05)
Офлайн
857
#!/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))
Отредактировано py.user.next (Окт. 10, 2013 21:11:49)
Офлайн
33
aborodinНу так и IPv6 может быть :)
Lexander, есть не нулевая вероятность что может появиться “лишний” разделитель в текстовом поле
aborodinЕсли это НЕ ежесекундно поступающие данные из внешнего источника, то - все в память и не мучиться.
3. 832350 байт
Отредактировано Lexander (Окт. 10, 2013 21:56:27)
Офлайн