Форум сайта python.su
Есть текстовый файл в котором находятся короткие тексты (250-300 символов), на каждой строке один текст, строк может быть тысяча. Нужно случайным образом взять оттуда одну строчку (один текст). Можно ли это как-то сделать не читая весь файл или просто как-то минимизировать обращение к диску и использование памяти?
Офлайн
Офлайн
Спасибо. А как можно узнать количество строк в файле, чтобы потом случайным образом выбрать число в нужном диапазоне? Проходить по файлу дважды?
Офлайн
Да, проходить дважды.
Офлайн
Тут такая идея в голову пришла, средняя длина строки известна:
pasaranaxВычисляем p = средняя длина строки/размер файла. Проходим построчно файл и с вероятностью p выбираем текущую строку. Если дошли до конца, а строка не выбрана берем последнюю. Будет выбор за один проход(и даже не всегда до конца), хотя и не совсем равномерное распределение.
Есть текстовый файл в котором находятся короткие тексты (250-300 символов), на каждой строке один текст, строк может быть тысяча.
Отредактировано (Март 3, 2010 10:17:12)
Офлайн
Случайную строку (но не ее номер по порядку) получают даже проще: прыжок куда-нибудь внутрь файла и затем вытягивание до перевода каретки. Искомая строка - от этого перевода и до следующего.
Офлайн