バイナリ編集

写真をたくさんいただいたが,JPEGファイル内に記録されている日付が間違っている! 一括置換したいが,バイナリファイルである。どうするか。日付はファイルの冒頭近くに3箇所書き込まれているので,安全のため3箇所だけ置換する。読み書きはバイナリモードで行う。

#! /usr/bin/env python3

import sys
import re

for arg in sys.argv[1:]:
    with open(arg, 'rb') as f:
        file = f.read()
    newfile = re.sub(b'2021:11:14 ', b'2019:11:15 ', file, count=3)
    with open('new/' + arg, 'wb') as f:
        f.write(newfile)

もう一つの例。壊れたWebMファイルを修復したい。WebMのシグネチャ b"\x1a\x45\xdf\xa3" より前を削ればよい。

#! /usr/bin/env python3

import sys

if len(sys.argv) != 3:
    print(f"Usage: {sys.argv[0]} infile outfile")
    exit()

with open(sys.argv[1], "rb") as f:
    data = f.read()

offset = data.find(b"\x1a\x45\xdf\xa3") # webm signature
print("Offset:", offset)
if offset < 0:
    print("Not a webm file")
    exit()

with open(sys.argv[2], "wb") as f:
    f.write(data[offset:])

Last modified: