Двоичный файл IO в python, с чего начать?

Как любитель самоучки python, как я могу научиться импортировать и экспортировать двоичные файлы с использованием стандартных форматов?

Я хотел бы реализовать скрипт, который берет электронные книги ePub (XHTML + CSS в zip) и преобразует его в формат mobipocket (Palmdoc), чтобы позволить Amazon Kindle прочитать его (как часть большего проекта, над которым я работаю).

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

в этом случае я знаю, что я не знаю много об этих двоичных файлах и как работать с ними в коде python (struct?). Но я думаю, что я, вероятно, пропустил много знание о двоичных файлах в целом, и я хотел бы помочь понять, как с ними работать. вот подробный обзор заголовков mobi/palmdoc. Спасибо!

Edit: нет вопросов, хорошая мысль! У вас есть какие-либо советы о том, как получить базовые знания о работе с двоичными файлами? Python-specific будет полезен, но могут быть полезны и другие подходы.

TOM: отредактировано как вопрос, добавлено вступление / лучшее название

3 ответов


вы, вероятно, должны начать с struct модуль, как вы указали в своем вопросе, и, конечно же, откройте файл в двоичном формате.

в основном вы просто начинаете в начале файла и разбираете его по частям. Это хлопотно, но не большая проблема. Если файлы сжаты или зашифрованы, все может стать сложнее. Это полезно, если вы начинаете с файла, который вы знаете содержимое, поэтому вы не угадываете все время.

попробуйте немного, и, возможно, вы будете развивать более конкретные вопросы.


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

есть несколько модулей, которые могут помочь, такие как BitVector, bitarray и bitstring. (Я предпочитаю bitstring, но я написал его и поэтому могу быть предвзятым).

для разбора двоичных форматов hachoir модуль очень хорош, но я подозреваю, что он слишком высок для ваших текущих потребностей.


для обучения себя инструментам python, которые работают с двоичными файлами, это заставит вас идти. И весело. Упражнения с двоичными файлами, молниями, изображениями... намного больше.