Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Python] Тест на скорость 
:(
    Опции темы
Suppir
Дата 5.2.2010, 20:58 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



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

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



   
PM MAIL   Вверх
Daevaorn
Дата 5.2.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



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

Тема перенесена! 
PM MAIL WWW   Вверх
andrew_121
Дата 6.2.2010, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 0
Всего: 33



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

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


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Karadul
Дата 6.2.2010, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Двачую, давайте код.
PM MAIL   Вверх
Suppir
  Дата 6.2.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



На 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 читать файл целиком в переменную, то скорость выглядит достойно, но при этом невозможна работа со строками как с отдельными элементами (их все равно придется сплитить, а это займет много времени). Интересно узнать скорость питона.

Это сообщение отредактировал(а) Suppir - 6.2.2010, 12:17
PM MAIL   Вверх
Karadul
Дата 6.2.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Может, генерить строки рандомом в программе? А то может наложиться такая вещь, как кеширование файла ОС - а файл имхо должен быть не слишком маленький, чтобы что-то намерять.
PM MAIL   Вверх
Suppir
Дата 6.2.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



файл размером 23 мегабайта.
PM MAIL   Вверх
Suppir
Дата 7.2.2010, 10:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Ну? 90 человек посмотрели и никто код не написал? :(
PM MAIL   Вверх
zim22
Дата 7.2.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



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

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


--------------------
PM MAIL   Вверх
Suppir
Дата 7.2.2010, 13:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



два человека сказали, что напишут. Делов-то на две минуты.
PM MAIL   Вверх
zim22
Дата 7.2.2010, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



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

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


--------------------
PM MAIL   Вверх
Suppir
Дата 8.2.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Кто-нибудь владеет Python?
Напишите, пожалуйта, код из сабжа.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1042 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.