2010-07-01 8 views
3

l'aide d'une matrice python, je peux initialiser un tableau d'entiers 32487834 (qui se trouve dans un HR.DAT de fichier) en utilisant les éléments suivants (pas parfaitement Pythonic, bien entendu) les commandes:ctypes initialisation réseau c_int par la lecture du fichier

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

J'ai besoin de faire la même chose dans ctypes. Jusqu'à présent, le meilleur que j'ai est:

HR = c_int * 32487834 

Je ne sais pas comment initilize chaque élément du tableau en utilisant HR.DAT. Des pensées?

Merci,

Mike

Répondre

8

objets de fichiers ont une méthode 'readinto (..)' qui peut être utilisé pour remplir objets qui prennent en charge l'interface tampon.

Donc, quelque chose comme cela devrait fonctionner:

f = open('hr.dat', 'rb') 
array = (c_int * 32487834)() 
f.readinto(array) 
+0

Merci, cela a fonctionné, et est très efficace. S'il vous plaît modifier afin que je puisse voter (verrouillé hier par accident). – MikeRand

1

Essayez quelque chose comme ceci pour convertir tableau en tableau 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 
+0

Le problème qui est '* retourne un tuple a' des éléments du tableau, qui a besoin de charger le tout dans la mémoire (si était' un a' itérateur) puis convertir en types Python (uniquement pour les reconvertir en ctypes). – Kos

Questions connexes