Обработка текста - производительность Python и Perl [закрыто]

Вот мой скрипт на Perl и Python для простой обработки текста из примерно 21 файла журнала, каждый из которых повторяется примерно от 300 × # 0 до 1 × МБ (максимум) x 5 раз (всего 125 файлов из-заlog повторяется 5 раз).

Python Code (код изменен для использования скомпилированногоre и используяre.I)

#!/usr/bin/python

import re
import fileinput

exists_re = re.compile(r'^(.*?) INFO.*Such a record already exists', re.I)
location_re = re.compile(r'^AwbLocation (.*?) insert into', re.I)

for line in fileinput.input():
    fn = fileinput.filename()
    currline = line.rstrip()

    mprev = exists_re.search(currline)

    if(mprev):
        xlogtime = mprev.group(1)

    mcurr = location_re.search(currline)

    if(mcurr):
        print fn, xlogtime, mcurr.group(1)

Perl Code

#!/usr/bin/perl

while (<>) {
    chomp;

    if (m/^(.*?) INFO.*Such a record already exists/i) {
        $xlogtime = $1;
    }

    if (m/^AwbLocation (.*?) insert into/i) {
        print "$ARGV $xlogtime $1\n";
    }
}

И на моем компьютере оба кода генерируют точно такой же файл результатов из 10 790 строк. И вот время, проведенное для реализаций Cygwin Perl и Python.

User@UserHP /cygdrive/d/tmp/Clipboard
# time /tmp/scripts/python/afs/process_file.py *log* *log* *log* *log* *log* >
summarypy.log

real    0m8.185s
user    0m8.018s
sys     0m0.092s

User@UserHP /cygdrive/d/tmp/Clipboard
# time /tmp/scripts/python/afs/process_file.pl *log* *log* *log* *log* *log* >
summarypl.log

real    0m1.481s
user    0m1.294s
sys     0m0.124s

Первоначально для этой простой обработки текста потребовалось 10,2 секунды с использованием Python и всего 1,9 секунды с использованием Perl.

(UPDATE) but, after the compiled re version of Python, it now takes 8.2 seconds in Python and 1.5 seconds in Perl. Still Perl is much faster.

Есть ли способ улучшить скорость Python вообще ИЛИ очевидно, что Perl будет быстрым для простой обработки текста.

Кстати, это был не единственный тест, который я провел для простой обработки текста ... И каждый раз, когда я делаю исходный код, всегда Perl всегда побеждает с большим отрывом. И не раз Python выступал лучше для простогоm/regex/ совпадать и печатать вещи.

Please do not suggest to use C, C++, Assembly, other flavours of Python, etc.

I am looking for a solution using Standard Python with its built-in modules compared against Standard Perl (not even using the modules). Boy, I wish to use Python for all my tasks due to its readability, but to give up speed, I don't think so.

So, please suggest how can the code be improved to have comparable results with Perl.

UPDATE: 2012-10-18

Как и предполагали другие пользователи, Perl имеет свое место, а Python - свое.

Таким образом, для этого вопроса можно с уверенностью заключить, что для простого регулярного выражения сопоставьте в каждой строке сотни или тысячи текстовых файлов и запишите результаты в файл (или распечатайте на экран),Perl will always, always WIN in performance for this job. It as simple as that.

Обратите внимание, что когда я говорю, что Perl выигрывает в производительности ... сравниваются только стандартные Perl и Python ... не прибегая к каким-то непонятным модулям (неясным для обычного пользователя, такого как я), а также не вызывая C, C ++, библиотеки сборки из Python или Perl. У нас нет времени, чтобы изучить все эти дополнительные шаги и установку для простого задания соответствия текста.

Итак, Perl отлично подходит для обработки текста и регулярных выражений.

Python имеет свое место, чтобы качаться в других местах.

Update 2013-05-29: Отличная статья, которая делает подобное сравнениеэто здесь, Perl снова побеждает при простом сопоставлении текста ... А для более подробной информации читайте статью.

Ответы на вопрос(5)

Ваш ответ на вопрос