| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [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 |
легко. покажи что на остальных написал. |
| Автор: 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 Добавлено @ 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, 13:01 |
| два человека сказали, что напишут. Делов-то на две минуты. |
| Автор: zim22 7.2.2010, 13:30 |
но не сказали когда |
| Автор: Suppir 8.2.2010, 10:36 |
| Кто-нибудь владеет Python? Напишите, пожалуйта, код из сабжа. |