|
2 / 2 / 1
Регистрация: 04.08.2022
Сообщений: 59
|
|
Какая библиотека архивации для Python даёт произвольный доступ к файлу в архиве?29.01.2023, 08:14. Показов 1554. Ответов 21
Метки нет (Все метки)
У меня есть большие архивы, в них текстовые файлы весом в несколько гигабайт. Необходимо получать доступ к произвольной точке в этом файле. (.seek).
Сейчас я использую для этого библиотеку zipfile и она работает достаточно медлено - чем дальше к концу файла нужно перейти, тем больше времени требуется, вплоть до десятков секунд. Но библиотек много - zlib, gzip,lzma,shutil,bz2,tarfile и.т.п. Вы не знаете, какая из них даёт доступ к любому месту файла в архиве за линейное время, как и аналогичная функция seek для текстовых файлов? Очень нужно и дробить файлы на тысячи кусков не хочется. Заранее спасибо.
0
|
|
| 29.01.2023, 08:14 | |
|
Ответы с готовыми решениями:
21
Кроссплатформенная библиотека для архивации |
|
1045 / 313 / 78
Регистрация: 16.03.2020
Сообщений: 954
|
|
| 29.01.2023, 09:18 | |
|
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
|
|
| 29.01.2023, 09:22 | |
|
Testfor, tar, без сжатия, возможно, поможет. А так, любые архивы с компрессией придется расжимать, на что будет тратится время.
0
|
|
|
2 / 2 / 1
Регистрация: 04.08.2022
Сообщений: 59
|
|
| 29.01.2023, 09:53 [ТС] | |
|
u235, rim41, Catstail,
Без сжатия не имеет смысла... Тогда архивы вообще не нужны. А по поводу питона - проблема не в нём. Смена языка даст прирост в скорости в несколько раз максимум. При этом доступ к любому месту в файле без разархивации остального ускорит работу в тысячи раз. Я пробовал с разным уровнем сжатия, даже при минимальном ищет очень долго. Но задача точно имеет решение, если использовать алгоритм, сжимающий данные по блокам и индексирующий начало каждого блока. По сути это и будет разбивание одного файла на множество маленьких и их независимое сжатие. Только не так костыльно будет выглядеть. Может знаете, какой из алгоритмов сжимает данные блоками?
0
|
|
|
Автоматизируй это!
|
||
| 29.01.2023, 10:12 | ||
|
похоже вам нужно сначала реализовать такой алгоритм.
2
|
||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
|
||
| 29.01.2023, 10:19 | ||
|
1
|
||
|
2 / 2 / 1
Регистрация: 04.08.2022
Сообщений: 59
|
|
| 29.01.2023, 10:33 [ТС] | |
|
Catstail,
Уже реализовал. Просто разрезаю файл на файлы по 1000000 символов и сжимаю в один архив, открываю нужный файл и в нём ищу через seek. Время поиска - доли секунды. Но это костыли и если понадобится файл целиком - его придётся обратно собирать. Несколько файлов в одном архиве хранить - путаница. А при добавлении нового файлы недостаточно его заархивировать - ещё и разрезать нужно. Мне решение этой задачи нужно что бы читать архивные данные с кое-каких приборов из файлов. База данных не вариант данные слишком разнообразные. Файлы без сжатия тоже - в архивах файлы весят около 400 GB, а без архивов - 10 терабайт (формат json). Welemir1, А что тут сложного? Разархивация файла занимает даже меньше времени, чем его чтение с диска. Я специально это даже тестировал. Что бы прочитать файл в чистом виде нужно больше времени, чем что бы прочитать архив и разархивировать файл. И нет, сжатие будет не сильно хуже. Я сравнивал сжатие файла целиком и сжатие этого же файла, разрезаного на куски по мегабайту. Разница считаные проценты. А если использовать один и тот же словарь для сжатия, то разницы не будет вовсе. Мета информация об архиве - размер сейчас, где начало в памяти сейчас, где начало в памяти до сжатия. Вот и вся информация, которая требуется. Технически всё возможно, я уверен, должны были существовать люди, которые это уже реализовали.
0
|
|
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
|
| 29.01.2023, 10:43 | |
|
Testfor, а если для хранения информации использовать БД?
1
|
|
|
2 / 2 / 1
Регистрация: 04.08.2022
Сообщений: 59
|
|
| 29.01.2023, 10:50 [ТС] | |
|
u235, Ну я не собираюсь ударяться в крайности. С математической точки зрения поиск нужного блока занимает константное время. Поиск строки в нужном блоке логарифмическое время. Так что очевидно, что чем больше блоков - тем быстрее поиск, но меньше сжатие.
Поэтому я просто протестировал разбиения на файлы по 10kk, 1kk, 100k, 10k символов и некоторые промежуточные, посчитал время доступа к нужной строке в среднем с учётом ситуации, когда она оказывается в нескольких файлах. Оптимальным соотношением мне показались блоки в 1kk символов. Естественно хорошо бы иметь библиотеку, написанную профессионалами, которая берёт всё это на себя.
0
|
|
|
Супер-модератор
|
||
| 29.01.2023, 10:50 | ||
|
0
|
||
|
2 / 2 / 1
Регистрация: 04.08.2022
Сообщений: 59
|
|
| 29.01.2023, 11:10 [ТС] | |
|
Данные в формате json и крайне запутанные. Их парсинг и структурирование для добавление в базу данных - задача не на один день точно. И плюс данные всё время пополняются, а форматы меняются.
Добавлено через 12 минут Catstail, Red white socks, Welemir1, u235, Проблема X - есть терабайты файлов неправильного формата, строки в которых упорядочены по дате, которая в них содержится в формате json. По этой же дате я ищу файлах строки из нужного временного диапазона. Использую алгоритм больше-меньше. Вариант добавить в базу данных сложно реализуем. Во-первых тогда нужно парсить исходные данные и приводить их к формату SQL. И будет очень сложно сделать так, что бы не возникло никаких ошибок, особенно учитывая, что в самих данных тоже встречаются куски SQL кода, а данные очень разнообразные. Во-вторых доступ к данным есть у широкого круга лиц. А я знаю SQL недостаточно хорошо, что бы защититься от инъекции. В-третьих данные часто требуются в исходном виде в виде файлов и придётся хранить две копии - в базе SQL и в исходном формате. Данные большие, место не бесплатное. В-четвёртых данные поступают в формате json. И выводить их тоже нужно в формате json. Так что если парсить и структурировать данные - дополнительная нагрузка и двойная работа. И не факт, что не возникнет ошибок, так как, например, кавычки где-то используются одинарные, а где-то двойные. Добавлено через 5 минут И последний момент. Да, я собираюсь перевести все данные в базу данных в дальнейшем. Но это займёт несколько недель минимум. А поиск в архивах можно запустить уже завтра и он будет работать в это время.
0
|
|
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
|
| 29.01.2023, 11:17 | |
|
Но вы же все равно каким-то образом парсите файл? То, что это данные с приборов, а значит каким то образом унифицированы - прямая причина использования БД. Даже без грамотной архитектуры, получив самые базовые знания, вы удивитесь, насколько быстрой может стать работа. И насколько меньше места занимают они по сравнению с текстовой простыней. А уж с грамотной...
У меня ощущение, что я рассказываю достоинства таблицы умножения. Сорри.
0
|
|
|
Автоматизируй это!
|
|
| 29.01.2023, 11:21 | |
|
Testfor, прочитал проблему Х, не просто. Если есть время почитай например про МонгоДБ, это NoSQL БД, то ест не надо знать сиквель, прям вот живой жсон туда суешь и все. И достаешь тоже жсон и ищет она сама, просто задашь ей что индексировать по полю дата. Инъекции ей нипочем, она не знает сиквеля, жсоны для нее родные, причем хранит она их в своем сжатом формате (BSON) то есть места будут занимать меньше.
Это не гарантия, я же не вижу всей проблемы, но потенциально это снимает целый ряд проблем описаных выше(в теории вообще все проблемы).
0
|
|
|
2 / 2 / 1
Регистрация: 04.08.2022
Сообщений: 59
|
|
| 29.01.2023, 11:34 [ТС] | |
|
Red white socks, Welemir1,
Данные не только с приборов, но и с сайтов, с API и.т.п. Короче компания по маркетингу, агрегации данных, информированию, актуализации и всё в этом духе. Зарплат для найма профессиональных програмистов у них нет, поэтому самый квалифицированный работник - студент с третьего курса бакалавриата, который вам сейчас пишет. И паршу данные не я. Их парсит программа, написанная тем, кто работал тут до меня. Принимает json, выдаёт работникам читабельный формат данных. Трогать её нельзя, если развалится, починить некому. В SQL у меня данные поверхностные мягко говоря. Пару дней назад я тут спрашивал, почему команда SOURSE не работает что бы было понятно... Я понимаю, что всю эту систему нужно переделывать и как раз изучаю сейчас базы данных, но работы не на одну неделю, поэтому ищу как запустить прямо сейчас. Пока работает на данных возрастом недели две, так что слоган про актуальность начинает эту актуальность терять.
0
|
|
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|
| 29.01.2023, 11:36 | |
|
Если посмотреть в корень проблемы (как раз Х
), то наверняка с приборов можно забирать данные более кошерным способом. Какой-нибудь OPC-сервер + скада, которая прекрасно работает с общепризнанной БД, типа мускуля или постгреса. И выборка тебе, и визуализация, и все остальное...Добавлено через 44 секунды Упс. Пока писал пост, этого не видел. Пардон
0
|
|
| 29.01.2023, 11:36 | |
|
Помогаю со студенческими работами здесь
20
Библиотека для Java которая дает разную информацию о компьютере
Библиотека Ionic.Zip и пароль на архиве :) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|