2011-03-10 212 views
7

我的程序在尝试将字符串从字符串列表转换为浮点数时给我一个错误。该列表是从CSV文本文件中的行中读取的,然后分成一个列表。我如何做这项工作,为什么会出错?下面是代码的相关位:为什么float()无法将我的字符串转换为float?

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" 

我在Ubuntu Linux计算机上使用Python 2.7。

+1

看起来像'liLn [6]'包含''31.496“',包括引号,也许你应该在将它们传递给'float()'之前去掉它们?这只是一个猜测。另外,让我成为第一个说,欢迎来到SO! :) – 2011-03-10 03:13:46

+5

你为什么不使用'csv'? – 2011-03-10 03:18:38

+0

无论您是否使用'csv'模块,您都应该考虑将所有这些值放入一个容器类(例如'collections'模块中的'namedtuple' tuple子类),以使它们更容易和更易读取,就像例如,“liLn.dbh”。如果没有别的办法,你可以定义包含它们命名的字段索引的整型变量。例如,设置'DBH = 2'可让您编写'liLn [DBH]'而不是'liLn [6]'。 – martineau 2011-03-21 08:22:47

回答

9

您需要去掉字符串中的双引号。然后你会给出一个float()可以转换的合法浮点字符串。

+5

哈哈!谢谢,这让它工作。我要戴上我的帽子,在角落里坐一会儿。 – cfwschmidt 2011-03-10 03:57:02

相关问题