Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Обработка файла 3 строк занимает 48 сек (проблемы с re.compile() и trailing-пробелами) / 1 сообщений из 1, страница 1 из 1
18.03.2017, 18:19
    #39422249
Обработка файла 3 строк занимает 48 сек (проблемы с re.compile() и trailing-пробелами)
Здравствуйте.

Сильно прошу не пинать, в питоне - нуб.
Есть вот такой скрипт:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
import os
import sys
import re

if len(sys.argv)==1:
  print('Please specify input file.')
  exit(1)

fn=sys.argv[1]

def showtime():
     import datetime
     return ''.join( (datetime.datetime.now().strftime("%H:%M:%S.%f")[:11],'.') )

i=0

rf_pattern=re.compile('(.*\s+)*blobs$')
#rf_pattern=re.compile('(\d+\s+)*blobs$')

with open( fn ) as f:
    for line in f:
        i += 1
        print(showtime(),'pass #1: line',i,line.replace(' ','_').rstrip())

        if rf_pattern.match(line.rstrip()):
            print(showtime(),'pass #1: pattern matches')

print(showtime(),'Point after pass #1.')



with open( fn ) as f:
    for line in f:
        i += 1
        print(showtime(),'pass #2: line',i,line.replace(' ','_').rstrip())

        if rf_pattern.match(line):
            print(showtime(),'pass #2: pattern matches')

print(showtime(),'Point after pass #2.')


А также есть текстовый файл из трёх ascii-строк, вот только во второй и третьей строках имеется по 19 trailing-пробелов.
Строки - следующие:
Код: plaintext
1.
2.
3.
Database
Table                   
Index                   
Последняя строка в файле завершается парой CR/LF.

То же самое, но если заменить пробелы на "_", будет выглядеть так:
Код: plaintext
1.
2.
3.
Database
Table___________________
Index___________________
(привожу для наглядности).


Запускаю скрипт (Python 3.5.2), задаю ему на вход имя этого файла.
Получаю след. вывод на консоль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
18:09:10.77. pass #1: line 1 Database
18:09:10.77. pass #1: line 2 Table___________________
18:09:10.77. pass #1: line 3 Index___________________
18:09:10.78. Point after pass #1.
18:09:10.78. pass #2: line 4 Database
18:09:10.78. pass #2: line 5 Table___________________
18:09: 34 .54. pass #2: line 6 Index___________________
18:09: 58 .21. Point after pass #2.

Время, потраченное за обработку трёх строк в pass#2, равно 48 секундам .

При замене паттерна:
Код: python
1.
rf_pattern=re.compile('(.*\s+)*blobs$')

на:
Код: python
1.
rf_pattern=re.compile('(\d+\s+)*blobs$')

-- всё сразу летает.

Я понимаю, что шаблон '(.*\s+)*blobs$' написан "немного по-дэбильному", но... как за это можно карать 48 секундами штрафа ?!..
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Обработка файла 3 строк занимает 48 сек (проблемы с re.compile() и trailing-пробелами) / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]