Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Python] Тест на скорость


Автор: Suppir 5.2.2010, 20:58
Хочу сравнить скорость Perl, Python и Autoit в задаче поиска/замены в текстовом файле с помощью регулярных выражений.
Напишите, мне, пожалуйста, следующий элементарный код на Python:

1. Открыть файл на чтение test.txt
2. Открыть файл на запись test2.txt
3. Установить начало действия таймера
4. Читая каждую строчку из файла test.txt...
а) найти текст с помощью регулярного выражения (.+?):.+
б) заменить на $1
в) записать измененную строку в test2.txt
5. Установить конец действия таймера
6. Вывести результат в секундах



   

Автор: Daevaorn 5.2.2010, 21:02
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: andrew_121 6.2.2010, 05:08
Цитата(Suppir @  5.2.2010,  20:58 Найти цитируемый пост)
Напишите, мне, пожалуйста, следующий элементарный код на Python:

легко. покажи что на остальных написал.

Автор: Karadul 6.2.2010, 09:44
Двачую, давайте код.

Автор: Suppir 6.2.2010, 12:12
На Perl:

use Benchmark;

open(IN, "test.txt");
open(OUT, ">test2.txt");
$t0 = new Benchmark;
while(<IN>){
    s/(.+?):.+/$1/;
    print OUT
}
$t1 = new Benchmark;
$td = timediff($t1, $t0);
print "the code took:",timestr($td),"\n";
<>


На Autoit:

#include <Timers.au3>

$IN = FileOpen("test.txt", 0)
$OUT = FileOpen("test2.txt", 2)

$starttime = _Timer_Init()
While True
    $sLine = FileReadLine($IN)
    if @error = -1 Then ExitLoop
    $sLine = StringRegExpReplace($sLine, "(.+?):.+", "$1")
    FileWriteLine($OUT, $sLine)
WEnd
MsgBox(0, "", _Timer_Diff($starttime))


На Autoit(весь файл в одну переменную):  

$IN = FileOpen("test.txt", 0)
$OUT = FileOpen("test1.txt", 2)

$starttime = TimerInit()
$sText = FileRead($IN)
$sText = StringRegExpReplace($sText, "(.+?):.+", "$1")
FileWrite($OUT, $sText)
MsgBox(0, "", TimerDiff($starttime) & @CRLF)




Напишите мне код на Python  smile

Добавлено @ 12:17
Результат на моем тестовом файле:

Perl - 6 секунд
AutoIt - 31 секунда
AutoIt (весь файл в одну переменную) - 6 секунд

Таким образом я обнаружил, что в AutoIt очень плохо организована работа с буфером STDIN и STDOUT. При каждом вызове функции FileWriteLine() он пишет в файл, тогда как Perl пишет "порциями" и таким образом рвет по скорости в клочья. Если в AutoIt читать файл целиком в переменную, то скорость выглядит достойно, но при этом невозможна работа со строками как с отдельными элементами (их все равно придется сплитить, а это займет много времени). Интересно узнать скорость питона.

Автор: Karadul 6.2.2010, 12:19
Может, генерить строки рандомом в программе? А то может наложиться такая вещь, как кеширование файла ОС - а файл имхо должен быть не слишком маленький, чтобы что-то намерять.

Автор: Suppir 6.2.2010, 12:22
файл размером 23 мегабайта.

Автор: Suppir 7.2.2010, 10:44
Ну? 90 человек посмотрели и никто код не написал? :(

Автор: zim22 7.2.2010, 11:12
Цитата(Suppir @  7.2.2010,  09:44 Найти цитируемый пост)
Ну? 90 человек посмотрели и никто код не написал? :(

я не понимаю. тебе что, кто-то должен?

Автор: Suppir 7.2.2010, 13:01
два человека сказали, что напишут. Делов-то на две минуты.

Автор: zim22 7.2.2010, 13:30
Цитата(Suppir @  7.2.2010,  12:01 Найти цитируемый пост)
два человека сказали, что напишут

но не сказали когда smile

Автор: Suppir 8.2.2010, 10:36
Кто-нибудь владеет Python?
Напишите, пожалуйта, код из сабжа.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)