У меня есть программа, которая вычисляет смещение (разницу), а затем сохраняет их в 16-битном беззнаковом int с помощью numPy, и я хочу сохранить это int в двоичный файл, поскольку он находится в двоичной форме. т.е. если значение смещения равно 05, я хочу, чтобы файл отображал «01010000 00000000», но не как строку. Код, который я написал:
target = open(file_cp, 'wb')
target.write('Entries')
target.write('\n')
Start = f.tell()
while(!EOF):
f.read(lines)
Current = f.tell()
offset = np.uint16(Current-Start)
target.write(offset)
Есть некоторая обработка после f.read (lines), но это своего рода идея. Код работает нормально, пока смещение меньше 127. Как только смещение превышает 127, в файле появляется 0xC2 вместе с двоичными данными.
Данные в файле выглядят следующим образом (шестнадцатеричный вид, маленький индеец): 00 00 05 00 0e 00 17 00 20 00 3c 00 4e 00 7b 00 c2 8d 00 c2 92 00 c2 9f 00
Может кто-нибудь подсказать решение проблемы?
2 ответа
Попробуй это.
import numpy as np
a=int(4)
binwrite=open('testint.in','wb')
np.array([a]).tofile(binwrite)
binwrite.close()
b=np.fromfile('testint.in',dtype=np.int16)
print b[0], type(b[0])
Вывод: 4 типа 'numpy.int16'
Надеюсь, это то, что вы ищете. Работает для n> 127, но читает и записывает массивы numpy ... binwrite = open ('testint.in', 'ab') позволит вам добавить больше int в файл.
Вам следует использовать встроенный модуль struct
. Вместо этого:
np.uint16(Current-Start)
Попробуй это:
struct.pack('H', Current-Start)
struct.pack('H', np_uint16_instance)
это то же самое, что np_uint16_instance.tostring()
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
with statement
< / a> (чтобы файл всегда закрывался, код становился более идиоматичным / читаемым / короче) и печатать как функцию - в его нынешнем виде ваша программа содержит синтаксическую ошибку в текущих версиях Python.