2010-05-12 28 views
6

में एक एक्सपोनेंट * के साथ एक फ्लोट * का प्रतिनिधित्व करने वाली स्ट्रिंग को पार्स करना मेरे पास 6,52353753563E-7 के रूप में संख्याओं के साथ एक बड़ी फ़ाइल है। तो उस स्ट्रिंग में एक एक्सपोनेंट है। float() इस पर मर जाता है।पाइथन

जबकि मैं कुछ float() में स्ट्रिंग को प्री-प्रोसेस करने के लिए कस्टम कोड लिख सकता हूं, मैं इन्हें एक फ्लोट में परिवर्तित करने के पाइथोनिक तरीके की तलाश कर रहा हूं (कुछ प्रारूपित स्ट्रिंग की तरह कुछ)। मुझे कहना होगा कि मैं आश्चर्यचकित हूं float() ऐसे एक्सपोनेंट के साथ तारों को संभाल नहीं सकता है, यह बहुत आम सामान है।

मैं पायथन 2.6 का उपयोग कर रहा हूं, लेकिन 3.1 आवश्यकता होने पर एक विकल्प है।

उत्तर

13

एक्सपोनेंट के साथ कुछ भी नहीं करना है। दशमलव बिंदु के बजाय समस्या अल्पविराम है।

>>> float("6,52353753563E-7") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): 6,52353753563E-7 
>>> float("6.52353753563E-7") 
6.5235375356299998e-07 

एक सामान्य दृष्टिकोण के लिए, देखें locale.atof()

+0

सही। संयोग से, यदि आप पाइथन प्रॉम्प्ट में "6,52353753563E-7" टाइप करते हैं, तो इसे टुपल (6, 5235.3753563) के रूप में पार्स किया जाता है - काफी स्पष्ट क्यों है, यह अजीब दिखता है। –

+0

आह, धन्यवाद। जब टाइमर मुझे देता है तो मैं इसे स्वीकार कर लेता हूं। – Lucas

+0

संबंधित नोट पर, क्या मैं किसी भी तरह से पाइथन को अल्पविराम को पहचान सकता हूं? सी # और जावा यह कर सकते हैं। दुनिया में कई जगहों को अल्पविरामक के रूप में अल्पविराम का उपयोग करते हैं। – Lucas

1

आपकी समस्या प्रतिपादक में लेकिन अल्पविराम में नहीं है। पायथन 3.1:

>>> a = "6.52353753563E-7" 
>>> float(a) 
6.52353753563e-07