2012-04-12 14 views
5

के साथ जटिल टेक्स्ट फ़ाइलों को पढ़ना मैं एक जटिल फ़ाइल के साथ एक पाठ फ़ाइल में एक संख्यात्मक मॉडल से डेटा में पढ़ने के लिए numpy के साथ पायथन का उपयोग कर रहा हूँ।पायथन: numpy

न्यूम्पी के जेनफ्रॉक्स्ट और सेफाइल फ़ंक्शंस अच्छी तरह से काम करते हैं, लेकिन केवल तभी डेटा संरचित होता है।

------ कटाव

[sitename] [dimemsion 1 size] [dimension 2 size] 
[data for dim 1] 
[data for dim 2] 
[date/time] 
[header data] 
[data (dim1 * dim2)] 
[header] 
[data] 
... 
. 
. 
[data/time] 
[header] 
[data] 
. 
. 
etc... 

---- कटाव

तो, मैं पाठ और संख्या और एक जटिल का एक मिश्रण है (लेकिन: मेरे डेटा फ़ाइलों को कुछ इस तरह दिखता दोहराना) लेआउट। Numpy का उपयोग करने में इसे पढ़ने का सबसे अच्छा तरीका कैसा है?

चीयर्स,

क्रिस

+1

वहाँ से आप का प्रयोग करना होगा कर सकते हैं 'numpy की तुलना में बहुत आसान होता है केवल तरीकों? हो सकता है कि पढ़ने का हिस्सा सादे पायथन में किया जा सके। पाइपर्सिंग के लिए –

उत्तर

5

Numpy तो आप अच्छी तरह से करना यह परे देखने के लिए, और क्या आप चुनते ज्यादातर कैसे संगत फ़ाइलें हैं पर निर्भर करेगा चाहते हैं, सामान्यीकृत पार्स में अच्छा नहीं है।

यदि वे असामान्य रूप से अल्ट्रा संगत हैं, तो कहें, आप केवल ज्ञात पदों और ज्ञात पंक्तियों से संख्याएं निकाल सकते हैं, आप केवल स्टिंग के रूप में फ़ाइल लाइन में पढ़ सकते हैं और इस चरित्र को इंडेक्स कर सकते हैं चाहते हैं। (फाइल के माध्यम से कदम, उदाहरण के लिए, प्रत्येक पंक्ति को स्ट्रिंग के रूप में प्राप्त करने के लिए फ़ाइल.readlines का उपयोग करना।)

सामान्य मामला (कम से कम मुझे लगता है) यह है कि यह ऊपर से कहीं अधिक विविध है, लेकिन यह सरल स्ट्रिंग ऑपरेशन हो सकता है string.split (जो लगभग हमेशा मेरा पहला कदम है), जैसे

इसके अलावा, पाइथन में बहुत सारे पार्सिंग लाइब्रेरी हैं। मैं pyparsing पर आंशिक हूं (लेकिन मैं दूसरों को अच्छी तरह से नहीं जानता, इसलिए यह उचित तुलना नहीं है)। यहां a summary of the various parsing libraries है।

+0

+1। यह नौकरी के लिए बिल्कुल सही उपकरण है। –

+0

धन्यवाद - मैं कोशिश करने के लिए पाइपर्सिंग दे दूंगा। चूंकि यह पाइथन आधारित है (numpy.fromfile जैसे सी मॉड्यूल की बजाय), मुझे लगता है कि यह numpy का उपयोग करने से काफी धीमा होगा? क्रिस – ccbunney

+0

हां, कम से कम मेरे अनुभव से, pyparsing numpy.fromfile की तुलना में काफी धीमी है। मुझे लगता है कि यह भी बहुत कुछ कर रहा है। इसके अलावा, हालांकि यह एक अच्छी पुस्तकालय है, यह कुछ सीख लेता है। इस कारण से, मैं पहले इसे बुनियादी स्ट्रिंग ऑपरेशंस के साथ आज़माकर अनुशंसा करता हूं, क्योंकि ये आमतौर पर चाल करते हैं, और यदि ये काम नहीं करते हैं, तो पाइपर्सिंग पर जाएं (जब तक, निश्चित रूप से, आप वैसे भी पिपर्सिंग सीखना नहीं चाहते)। – tom10

1

मैं पिछले उत्तर से सहमत हूं। कदम के निम्नलिखित श्रृंखला सबसे अच्छा काम करते हैं और pyparsing या numpy.genfromtxt

inp = open(textfilename).readlines() 
my_list = [] 
for line in inp: 
    item = str.split(line) 
    my_list.append(float(item[0])) 

फिर आप आसानी से एक numpy सरणी/मैट्रिक्स में सूची बदलने और आगे बढ़ना