ctypes инициализирует массив c_int чтением файла - PullRequest
4 голосов
/ 01 июля 2010

Используя массив Python, я могу инициализировать 32 487 834 целочисленных массивов (находится в файле HR.DAT), используя следующие (конечно, не Pythonic) команды:

F = open('HR.DAT','rb')
HR = array('I',F.read())
F.close()

Мне нужно сделать то же самое в ctypes. Пока лучшее, что у меня есть:

HR = c_int * 32487834

Я не уверен, как инициализировать каждый элемент массива с помощью HR.DAT. Есть мысли?

Спасибо

Mike

Ответы [ 2 ]

9 голосов
/ 01 июля 2010

Файловые объекты имеют метод readinto (..), который можно использовать для заполнения объектов, поддерживающих интерфейс буфера.

Итак, что-то вроде этого должно работать:

f = open('hr.dat', 'rb')
array = (c_int * 32487834)()
f.readinto(array)
1 голос
/ 01 июля 2010

Попробуйте что-то вроде этого для преобразования массива в массив ctypes

>>> from array import array
>>> a = array("I")
>>> a.extend([1,2,3])
>>> from ctypes import c_int
>>> ca = (c_int*len(a))(*a)
>>> print ca[0], ca[1], ca[2]
1 2 3
...