2013-03-26 4 views
6

द्वारा पढ़ा जा करने के लिए मुझे लगता है कि इस तरह सेअजगर में बाइनरी फ़ाइलें लेखन सी

nCnt = 0; 
for (i=0;i<h.nsph;++i) { 
    fread(&gp,sizeof(struct gas_particle),1,fp); 
    if (bGas) { 
     kd->p[nCnt].iOrder = nCnt; 
     for (j=0;j<3;++j) kd->p[nCnt].r[j] = gp.pos[j]; 
     ++nCnt; 
     } 

    } 

में एक बाइनरी फ़ाइल से डेटा पढ़ने सी में लिखे एक प्रोग्राम का उपयोग करने के लिए ऊपर दिए गए कोड कार्यक्रम के पूरे कोड नहीं है मैं उपयोग कर रहा हूं लेकिन केवल मेरे प्रश्न के लिए प्रासंगिक हिस्सा है। मुझे nCnt कणों की स्थिति पढ़ने की जरूरत है, यानी प्रत्येक कण के लिए समन्वय। मैं एक अजगर सरणी में इन पदों है, जो इस

pos=array([[[ 0.4786236 , 0.49046784, 0.48877147], 
    [ 0.47862025, 0.49042325, 0.48877267], 
    [ 0.47862737, 0.49039413, 0.4887735 ], 
    ..., 
    [ 0.4785084 , 0.49032556, 0.48860968], 
    [ 0.47849332, 0.49041115, 0.48877266], 
    [ 0.47849161, 0.49041022, 0.48877176]]]) 

तरह लग रहा है मैं एक बाइनरी फ़ाइल में इस सरणी कैसे लिखना चाहिए ताकि सी कोड यह ठीक पढ़ा होगा?

+0

मुमकिन है कि एक 'numpy' सरणी है:

सी में, आप तो जैसे प्रत्येक पंक्ति पढ़ सकते हैं? –

+1

क्या आपने इसे चेक किया है: http://stackoverflow.com/questions/807863/how-to-output-list-of-floats-to-a-binary-file-in-python (प्रस्तावित समाधान http: // docs का उपयोग करता है .python.org/2/पुस्तकालय/array.html)? – furins

+0

क्या आप सार्वभौमिकता के लिए अपना डेटा स्ट्रिंग करना नहीं चाहते हैं? उदाहरण के लिए आप इसे जेएसओएन में स्टोर कर सकते हैं, उस स्थिति में आप अंतहीनता या सीधा पर निर्भर नहीं होंगे। –

उत्तर

5

पायथन मॉड्यूल array का उपयोग करें और यह tofile() method है जो उस प्रारूप में डेटा लिखने के लिए है जो सी पढ़ सकता है या IO routines if you use numpy

अंकों की संख्या के साथ, 'f' प्रारूप (फ्लोट) काम करना चाहिए।

float values[3]; 
fread(values, sizeof(float), 3, fh); 
+0

-1, वह सी – unwind

+0

@unwind नहीं है: सी विशेष रूप से सी नहीं है? –

+0

अब बेहतर है, 'मूल्यों' की अजीब घोषणा तय की गई है। फिर भी, इसमें 'fread()' के लिए एक तर्क गुम है और मौजूद तर्क गलत क्रम में दिए गए हैं। – unwind

संबंधित मुद्दे