Уведомления

Группа в Telegram: @pythonsu

#1 Март 3, 2010 01:13:03

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Как считать из файла произвольную строку не читая весь файл?

Есть текстовый файл в котором находятся короткие тексты (250-300 символов), на каждой строке один текст, строк может быть тысяча. Нужно случайным образом взять оттуда одну строчку (один текст). Можно ли это как-то сделать не читая весь файл или просто как-то минимизировать обращение к диску и использование памяти?



Офлайн

#2 Март 3, 2010 01:27:00

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как считать из файла произвольную строку не читая весь файл?

Офлайн

#3 Март 3, 2010 01:48:24

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Как считать из файла произвольную строку не читая весь файл?

Спасибо. А как можно узнать количество строк в файле, чтобы потом случайным образом выбрать число в нужном диапазоне? Проходить по файлу дважды?



Офлайн

#4 Март 3, 2010 09:18:02

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как считать из файла произвольную строку не читая весь файл?

Да, проходить дважды.

Офлайн

#5 Март 3, 2010 10:14:19

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Как считать из файла произвольную строку не читая весь файл?

Тут такая идея в голову пришла, средняя длина строки известна:

pasaranax
Есть текстовый файл в котором находятся короткие тексты (250-300 символов), на каждой строке один текст, строк может быть тысяча.
Вычисляем p = средняя длина строки/размер файла. Проходим построчно файл и с вероятностью p выбираем текущую строку. Если дошли до конца, а строка не выбрана берем последнюю. Будет выбор за один проход(и даже не всегда до конца), хотя и не совсем равномерное распределение.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Март 3, 2010 10:17:12)

Офлайн

#6 Март 3, 2010 12:20:21

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Как считать из файла произвольную строку не читая весь файл?

Случайную строку (но не ее номер по порядку) получают даже проще: прыжок куда-нибудь внутрь файла и затем вытягивание до перевода каретки. Искомая строка - от этого перевода и до следующего.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version