Programım, bir dizeyi bir dizelerden kayan nokta sayısına dönüştürmeye çalıştığında bana bir hata veriyor. Liste bir CSV metin dosyasındaki bir satırdan okunur ve daha sonra bir listeye ayrılır. Bu işi nasıl yaparım ve neden yanlış gidiyor?Neden float() dizgemi bir float'a dönüştüremiyor?
def Main():
srcf = open(bkp, 'r')
for line in srcf:
liLn = line.split(',')
... Sonra aşağıdaki fonksiyon denir ... İşte
def Pred_PSME(liLn):
dbh = float(liLn[6])
dosyadan çizgidir:
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
Bu hata iletisini alıyorum:
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"
Ubuntu Linux bilgisayarında Python 2.7 kullanıyorum.
liLn [6] '' 31.496 '' içeren, tırnak işaretleri de dahil olmak üzere, 'float() '' a geçmeden önce bunları kesmelisiniz; Bu sadece bir tahmin. Ayrıca, ilk söyleyeyim, SO'ya hoş geldiniz! :) –
Neden csv' kullanmıyorsunuz? –
"csv" modülünü kullanıp kullanmadığınıza bakılmaksızın, tüm bu değerleri daha kolay ve okunabilir hale getirmek için bir kap sınıfına ("koleksiyonlar modülündeki" namedtuple "tuple alt sınıfı gibi) eklemeyi düşünmelisiniz. Örneğin liLn.dbh'. Başka bir şey yoksa, adının alan dizinini içeren tamsayı değişkenlerini tanımlayabilirsiniz. Örneğin, 'DBH = 2' ayarı' liLn [6] 'yerine liLn [DBH]' yazmanıza izin verir. – martineau