Организация файлов в файле tar bz2 с помощью python
У меня есть около 200000 текстовых файлов, которые помещены в файл bz2. У меня проблема в том, что когда я сканирую файл bz2 для извлечения нужных мне данных, он идет очень медленно. Он должен просмотреть весь файл bz2, чтобы найти нужный файл. Есть ли способ ускорить это?
Кроме того, я подумал о возможной организации файлов в tar.bz2, чтобы я мог вместо этого знать, где искать. Есть ли способ организовать файлы, которые помещаются в bz2?
More Info / Edit: мне нужно запросить сжатый файл для каждого текстового файла. Есть ли лучший метод сжатия, который поддерживает такое большое количество файлов и максимально сжат?
2 ответа
Вы должны использовать bzip2? Читая документацию, совершенно ясно, что она не предназначена для поддержки произвольного доступа. Возможно, вам следует использовать формат сжатия, более точно соответствующий вашим требованиям. Старый добрый формат Zip поддерживает произвольный доступ, но, конечно, может сжимать хуже.
Bzip2 сжимает большими блоками (по-моему, 900 КиБ). Один из способов, который значительно ускорит сканирование файла tar, но снизит производительность сжатия, - это сжать каждый файл по отдельности, а затем скомпоновать результаты вместе. По сути, это файлы Zip-формата (хотя они используют сжатие zlib, а не bzip2). Но вы можете легко получить индекс tar и распаковать только те файлы, которые вы ищете.
Я не думаю, что большинство tar
программы предлагают много возможностей для организации файлов любым осмысленным способом, хотя вы могли бы написать программу для этого в вашем особом случае (я знаю, что в Python есть библиотеки для записи tar, хотя я использовал их только один или два раза). Однако у вас все еще будет проблема распаковки большей части данных, прежде чем вы найдете то, что искали.