2011-03-10 9 views
7

मेरा प्रोग्राम मुझे एक त्रुटि दे रहा है जब यह तारों की सूची से स्ट्रिंग को एक फ़्लोटिंग पॉइंट नंबर में कनवर्ट करने का प्रयास करता है। सूची को CSV टेक्स्ट फ़ाइल में एक पंक्ति से पढ़ा जाता है और फिर सूची में विभाजित किया जाता है। मैं यह काम कैसे कर सकता हूं और यह गलत क्यों हो रहा है?फ़्लोट() मेरी स्ट्रिंग को एक फ्लोट में बदलने में विफल क्यों होता है?

def Main(): 
    srcf = open(bkp, 'r') 
    for line in srcf: 
     liLn = line.split(',') 

... फिर निम्नलिखित समारोह कहा जाता है ...

def Pred_PSME(liLn): 
    dbh = float(liLn[6]) 

यहाँ फ़ाइल से लाइन है:

1345327,20486,"ABCO","Abies concolor","Y","Y","31.496","0.0779","19.3567",,"0.5602","0",1,"0.9268","11.8968","2.6832","6.6646","2399.256",54.47,24.15,248.47,42.19,9.16,8.16,9.23,272.27,264.11,369.30,345.15,71.80,0.00,0.00,4393.57,4106.22,3239.25,3142.07,854.30,0.00,0.00,,12.70,10.16,15.24,0.02,0.04,0.38,0.38,0.00,0.00,1.95,1.83,1.44,1.40

यहाँ कोड के प्रासंगिक बिट कर रहे हैं

मुझे यह त्रुटि संदेश मिलता है:

Traceback (most recent call last): 
    File "/home/cfws/python/error_calcs/FC_NF_PredInt_Gen8.py", line 263, in <module> 
    Main() 
    File "/home/cfws/python/error_calcs/FC_NF_PredInt_Gen8.py", line 36, in Main 
    li_tBQI = BQI_Calc(liLn) 
    File "/home/cfws/python/error_calcs/FC_NF_PredInt_Gen8.py", line 63, in BQI_Calc 
    di_eqns = {"PSME": Pred_PSME(liLn), "ABAM":Pred_ABAM(liLn), \ 
    File "/home/cfws/python/error_calcs/FC_NF_PredInt_Gen8.py", line 172, in Pred_PSME 
    dbh = float(liLn[6]) 
ValueError: could not convert string to float: "31.496" 

मैं एक उबंटू लिनक्स कंप्यूटर पर पायथन 2.7 का उपयोग कर रहा हूं।

+1

उद्धरण समेत 'liLn [6]' '31.496" 'जैसा दिखता है, शायद आपको इसे 'फ्लोट()' में पास करने से पहले उन्हें बंद करना चाहिए? यह केवल एक अनुमान है। भी, मुझे सबसे पहले कहने दो, एसओ में आपका स्वागत है! :) –

+5

आप 'csv' का उपयोग क्यों नहीं कर रहे हैं? –

+0

भले ही आप 'csv' मॉड्यूल का उपयोग करते हों या नहीं, आपको इन सभी मानों को एक कंटेनर क्लास (जैसे' संग्रह 'मॉड्यूल में' नामांकित 'tuple subclass में डालने पर विचार करना चाहिए ताकि उन्हें आसान और अधिक पठनीय, उदाहरण के लिए 'liLn.dbh'। यदि कुछ और नहीं है, तो आप पूर्णांक चर को परिभाषित कर सकते हैं जिसमें उनके नाम का फ़ील्ड शामिल है। उदाहरण के लिए 'डीबीएच = 2' सेटिंग आपको 'liLn [6]' के बजाय 'liLn [DBH]' लिखने देती है। – martineau

उत्तर

9

आपको स्ट्रिंग से डबल कोट्स को पट्टी करने की आवश्यकता है। यह तब आप एक वैध फ़्लोटिंग पॉइंट स्ट्रिंग देंगे जो फ्लोट() परिवर्तित कर सकता है।

+5

हाहा! धन्यवाद, यह काम कर रहा है। मैं अपनी डन्स कैप पर जा रहा हूं और थोड़ी देर के लिए कोने में बैठूंगा। – cfwschmidt

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

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