Мгновенный доступ к строке из большого файла без загрузки файла - PullRequest
0 голосов
/ 26 ноября 2018

В одном из моих недавних проектов мне нужно выполнить эту простую задачу, но я не уверен, что является наиболее эффективным способом сделать это.

У меня есть несколько больших текстовых файлов (> 5 ГБ), и янеобходимо постоянно извлекать случайные строки из этих файлов.Требования следующие: я не могу загрузить файлы в память, мне нужно выполнять это очень эффективно (>> 1000 строк в секунду), и, предпочтительно, мне нужно выполнять как можно меньше предварительной обработки.

Файлы состоят из множества коротких строк ~ (20 млн. Строк).«Необработанные» файлы имеют различную длину строки, но с помощью короткой предварительной обработки я могу сделать так, чтобы все строки имели одинаковую длину (хотя для идеального решения не требуется предварительная обработка)

Я уже попробовал значение по умолчаниюРешения Python упоминали здесь , но они были слишком медленными (и решение linecache загружает файл в память, поэтому здесь его нельзя использовать)

Следующее решение, о котором я подумал, - это создать какое-тоиндекс.Я нашел это решение , но оно очень устарело, поэтому ему нужно немного поработать, и даже тогда я не уверен, что накладные расходы, созданные во время обработки индексного файла, не замедлят процесс дошкала времени решения выше.

Другое решение - преобразовать файл в двоичный файл и затем получить мгновенный доступ к строкам таким образом.Для этого решения я не смог найти ни одного пакета Python, который поддерживает работу с двоичным текстом, и я чувствую, что создание надежного синтаксического анализатора таким способом может занять очень много времени и может привести к возникновению множества трудно диагностируемых ошибок из-за небольших просчетов./mistakes.

Последнее решение, о котором я подумал, - это использование какой-либо базы данных (в моем случае sqlite), для которой потребуется перенести строки в базу данных и загрузить их таким образом.

Примечание:Я также буду каждый раз загружать тысячи (случайных) строк, поэтому преимущество будет иметь решения, которые лучше работают для групп линий.

Заранее спасибо,

Статья.

1 Ответ

0 голосов
/ 26 ноября 2018

Как сказано в комментариях, я считаю, что использование hdf5 было бы нам хорошим вариантом. Этот ответ показывает, как читать файлы такого типа

...