Мне просто интересно, как функция фактически хранит данные. Потому что для меня это выглядит совершенно странно. Скажем, у меня есть следующий код:numpy.array.tofile() двоичный файл выглядит «странно» в блокноте ++
import numpy as np
filename = "test.dat"
print(filename)
fileobj = open(filename, mode='wb')
off = np.array([1, 300], dtype=np.int32)
off.tofile(fileobj)
fileobj.close()
fileobj2 = open(filename, mode='rb')
off = np.fromfile(fileobj2, dtype = np.int32)
print(off)
fileobj2.close()
Теперь я ожидаю 8 байт внутри файла, где каждый элемент представлен 4 байта (и я мог бы жить с любыми байтами). Однако, когда я открываю файл в шестнадцатеричном редакторе (используется Notepad ++ с шестигранной редактор плагин) Я получаю следующие байты:
01 00 C4 AC 00
5 байт, и я понятия не имею, на все, что он представляет. Первый байт выглядит так, как будто это число, но тогда что-то странное, конечно, не «300».
Но перезагрузка показывает исходный массив.
Это что-то, что я не понимаю в python, или это проблема в блокноте ++? - Я замечаю, что hex выглядит иначе, если я выбираю другую «кодировку» (да?). Также: Windows сообщает, что она имеет длину 8 байтов.
Во-первых, 'int32' занимает 4 байта, а не 2. – abarnert
Далее вы пробовали читать файл в любой другой программе, кроме Notepad ++? Вы можете сделать это довольно легко в самом Python; вместо 'off = np.fromfile (fileobj2, dtype = np.int32)', просто сделайте 'off = fileobj2.read()', а затем напечатайте байты. Вы должны увидеть что-то вроде 'b '\ x01 \ x00 \ x00 \ x00, \ x01 \ x00 \ x00''; если вы видите 'b '\ x01 \ x00 \ xc4 \ xac \ x00'', то вы знаете, что это файл, который был сломан, а не Notepad ++. – abarnert
@abarnert, который был на самом деле опечаткой (уведомление я уже сказал «Я ожидаю 8 байт ...»). Хм, похоже, что notepad ++ сломан, это странно, никогда раньше этого не было: /, могу ли я спросить/преобразовать этот вопрос в «как сделать notepad ++ работу с шестнадцатеричным плагином» или это слишком offtopic здесь? – paul23