Как я должен читать и записывать формат файла, используя 1 определение? - PullRequest
2 голосов
/ 11 апреля 2011

Я хочу изменить файлы быстрого времени, поэтому я работаю с quicktime.py , но он только анализирует информацию. Он не знает, как писать / изменять вещи.

В C struct записи на самом деле очень мощные - вы получаете 4 вещи за стоимость одного читаемого определения:

  1. Определить имена для каждой переменной.
  2. Определите сериализуемые типы и порядок для каждой переменной (давайте проигнорируем машинно-специфические махинации для этого обсуждения).
  3. Пакет (запись)
  4. Распаковать ('parse')

В python модуль struct может выполнять числа 2-4, но вам нужно проделать дополнительную работу, чтобы заставить python определять имена как для упаковки, так и для распаковки на основе 1 определения (DRY).

OTOH ctypes может выполнять 1-4 (3-4 не совсем в stdlib, но их легче исправить с помощью this ), а ctypes поддерживает вложение.

Я понимаю, что если потребуется более сложный анализ / сериализация, будет написан конкретный код. Но все же мне кажется, что я должен быть в состоянии объяснить python, как выглядит файл, и он может сделать все остальное (pack / unpack). Проблема в том, что ctypes объявляется как «библиотека сторонних функций», поэтому это «не предполагается» делать. Другая проблема заключается в том, что ctypes, вероятно, не будет хорошо работать с ОГРОМНЫМ файлом, где вы просто хотите найти где-нибудь и изменить несколько бит, хотя я не проверял это.

Вот вопрос: какой СУХОЙ способ чтения и изменения двоичных форматов в python?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Попробуйте Создайте , он делает именно то, что вы хотите.

2 голосов
/ 11 апреля 2011

Может быть, попробовать Hachoir ?

...