2011-04-11 4 views
2

퀵타임 파일을 수정하고 싶습니다. 따라서 quicktime.py으로 작업하고 있지만 정보 만 분석합니다. 사물을 쓰거나 수정하는 법을 알지 못합니다. C에서 정의를 사용하여 파일 형식을 읽고 쓰려면 어떻게해야합니까?

struct 기록은 실제로 매우 강력 - 당신은 1 읽을 정의의 비용으로 4 가지를 얻을 :

  1. 것은 각 변수의 이름을 정의합니다.
  2. 각 변수에 대해 직렬화 가능 유형 및 순서를 정의하십시오 (이 설명에 대해서는 기계 고유의 속임수를 무시하십시오).
  3. 팩 (쓰기)
  4. 의 포장을 풀고 ('구문 분석')

파이썬에서 struct 모듈 숫자 2-4를 할 수 있지만, 파이썬은 모두 포장에 대한 이름을 정의하기 위해 추가 작업을 할 필요 1 정의 (DRY)에 기초한 언팩.

OTOH ctypes은 1-4를 수행 할 수 있습니다 (3-4는 stdlib에 정확히 없지만 this을 사용하여 패치하기가 쉽습니다). ctypes는 중첩을 지원합니다.

더 복잡한 구문 분석/직렬화가 필요하면 특정 코드가 작성된다는 것을 알고 있습니다. 하지만 여전히 파이썬에 파일이 어떻게 보이는지 설명 할 수 있어야하고 나머지는 할 수 있어야합니다 (압축/풀기). 문제는 ctypes가 "외부 함수 라이브러리"로 광고되므로 "가정 된"것이 아닙니다. 또 다른 문제는 ctypes가 아마도 테스트하지는 않았지만 어디서나 몇 비트를 변경하려고하는 거대한 파일에서 제대로 작동하지 않을 것입니다.

다음은 질문입니다. Python에서 이진 형식을 읽고 수정하는 DRY 방법은 무엇입니까?

+0

이제이 두 가지 정교한 답변을 보았습니다. PNG 파서를 사용하여 작업하는 방식을 비교하고 있습니다. https://bitbucket.org/haypo/hachoir/src/2a6cad1599c6/hachoir-parser/hachoir_parser/image/png.py vs https://github.com/MostAwesomeDude/construct/blob/master/construct/formats/graphics/png.py 그래서 나는 jiffy로 돌아와 내가 선택한 것을 말하겠습니다. – ubershmekel

답변

2

시도해보십시오. Construct을 시도해보십시오. 원하는대로 정확하게 수행됩니다.

관련 문제