Как читать и записывать двоичные данные как plist или zip? - PullRequest
0 голосов
/ 01 ноября 2019

f.pk - это, по сути, контейнер base64 + zip, который мне нужно импортировать в Python и извлечь. Это zip-файл p.plist, поэтому f.pk = path + name + data из p.plist.

Я не могу найти рабочую кодировку для open() или codecs.open(), чтобы открыть ее в виде строки и сохранить вывод. У меня всегда есть сгенерированный output.plist, который отличается от оригинала.

Кодировки, которые я уже использовал, включают ASCII;UTF-х;Latin_1;ISO-x;

import codecs, os

with open('f.pk', 'r', encoding='Latin_1') as f:
    f_open = f.read()

with codecs.open('f.pk', 'r', encoding='zip') as f:
    f_open = f.read()

f2=f_open[3:] #SKIP DUMMY PART
f3=f2.split('-DATA-')
f4=f3[1].split('-COMMENT-')

with open('output.plist', 'w') as f:
    print(f_out, file=f)

original.plist = 5e03964972def5b83880397b7377e6d1aea33e2b
output.plist = 6473aea0ae8bc75a04859effe1ee366de4cdd2d2

Я глубоко проанализировал оба файла:
both files безуспешно.

1 Ответ

0 голосов
/ 02 ноября 2019
with open('file.pk', 'rb') as f:
    f_open = f.read()

# do something with bytes here

with open('p.temp', 'wb') as f:
    pickle.dump(f_bytes, f) # temp file

# reload temp file
with open("p.temp", 'rb') as f:
    data = f.read()

# skip encodings and skip unwanted bytes
data = data[4:-3]

# save it
with open('p.plist', 'wb') as f:
    f.write(data)

os.remove('p.temp')
...