А есть файл, который может быть прочитан с помощью Fortran, и производит следующий вывод:Чтения FORtran двоичных данных с питоном, поплавки и Интс
0 2044150 229424 0 0 0
0.0000000000000000 0.0000000000000000
2.97821895219385624E-003 0.0000000000000000 0.0000000000000000
0.0000000000000000 7.81250000000000000E-003 127.00000000000000 0 0 0 91948296 10067568 7115688 0
0 0 48 67.769999999999996
0.30700001120567322 0.69300001859664917 0.67769998311996460
В принципе некоторых Int * 4 значений и некоторый поплавок * 8 значений (в заголовке). Я хочу, чтобы читать этот файл данных с помощью python. Я использовал следующий код:
f = open(fname,'rb')
data = np.fromfile(file=f,dtype=np.int32)
print data
и я получаю результат:
[ 256 0 2044150 229424 0 0
0 0 0 0 0 536870912
1063806407 0 0 0 0 0
0 0 ]
Некоторые из чисел в порядке, и я считаю, что 256 относится к размеру записи. Однако, когда я пытаюсь читать в поплавках (путем изменения np.int32 к np.float64) Я получаю
[ 1.26480805e-321 4.86836763e-309 0.00000000e+000 0.00000000e+000
0.00000000e+000 1.49166815e-154 5.25590200e-315 0.00000000e+000
0.00000000e+000 0.00000000e+000 5.26354425e-315 5.33599245e-315
0.00000000e+000 9.12063001e-306 3.51561699e-317 0.00000000e+000
-1.02951130e-086 2.68156223e+154 2.68156222e+154 -2.68156222e+154]
что явно неправильно не только для int32s, но и для поплавка 64s я пытался читать.
Я подумал, что, возможно, это было связано с большим/littlendian, но не нашли исправления. Я также уверен, что я пытаюсь прочитать правильный тип данных (float64) и попробовал много других, и они создают похожие (или худшие) результаты.
Я знаю, что формат заголовка int * 4 (6), real * 8 (6), real * 8, real * 8, int * 4, int * 4, int * 4 (6) , int * 4, int * 4, real * 8, real * 8, real * 8, real * 8, character (96)
вы не можете прочитать смешанный формат файла, указав либо INT или поплавок. Вы должны выбрать. Может быть, вы можете попробовать с 'struct.unpack' –
С предыдущими файлами я открыл их дважды, используя fromfile с dtype = int один раз, затем повторно открыл тот же файл и использовал fromfile с dtype = float и ранее работал нормально. Моя причина для постановки вопроса заключается в том, что это как-то необъяснимо отличалось. – Jack
проблема состоит в том, что файл начинается с 7 4-байтовых целых чисел. (Подсчет заголовка). Нечетно вы не выровнены правильно, если вы просто прочитали все это как 8 байтовых значений. – agentp