2009-09-18 16 views
5

हमारे पास सी प्रोग्राम द्वारा बनाई गई कुछ बाइनरी फ़ाइलें हैं। फ़ाइल कापाइथन के ctypes का उपयोग करके सरणी युक्त संरचना को कैसे पढ़ा जाए और पढ़ा जाए?

एक प्रकार दायर करने के लिए निम्नलिखित सी संरचना लिखने के fwrite बुला द्वारा बनाई गई है:

typedef struct { 
    unsigned long int foo; 
    unsigned short int bar; 
    unsigned short int bow; 

} easyStruc; 

अजगर में, मैं इस फ़ाइल का structs के रूप में इस पढ़ें:

class easyStruc(Structure): 
    _fields_ = [ 
    ("foo", c_ulong), 
    ("bar", c_ushort), 
    ("bow", c_ushort) 
] 

f = open (filestring, 'rb') 

record = censusRecord() 

while (f.readinto(record) != 0): 
    ##do stuff 

f.close() 

कि ठीक काम करता है। हमारी अन्य प्रकार की फ़ाइल निम्न संरचना का उपयोग करके बनाई गई है:

typedef struct { // bin file (one file per year) 
    unsigned long int foo; 
    float barFloat[4]; 
    float bowFloat[17]; 
} strucWithArrays; 

मुझे यकीन नहीं है कि पायथन में संरचना कैसे बनाएं।

उत्तर

9

इस documentation page (अनुभाग।: 15.15.1.13 सरणी) के अनुसार, यह होना चाहिए कुछ की तरह:

class strucWithArrays(Structure): 
    _fields_ = [ 
    ("foo", c_ulong), 
    ("barFloat", c_float * 4), 
    ("bowFloat", c_float * 17)] 

चेक अन्य उदाहरण के लिए कि प्रलेखन पेज।

+0

धन्यवाद! यकीन नहीं है कि मैं उसे कैसे याद किया। –

2

प्रलेखन में arrays in ctypes के बारे में एक अनुभाग है। मूल रूप से इसका अर्थ है:

class structWithArray(Structure): 
    _fields_ = [ 
     ("foo", c_ulong), 
     ("barFloat", c_float * 4), 
     ("bowFloat", c_float * 17) 
    ] 
संबंधित मुद्दे