2011-03-10 4 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에 오신 것을 환영합니다! :) –

+5

왜 'csv'를 사용하지 않습니까? –

+0

'csv' 모듈을 사용하든 안하든 관계없이 모든 값을 컨테이너 클래스 ('collections' 모듈의'namedtuple' 튜플 하위 클래스와 같은)에 넣는 것을 고려해야합니다. 예를 들어'liLn.dbh '. 그 밖의 것이 없다면 이름을 지정한 필드의 인덱스를 포함하는 정수 변수를 정의 할 수 있습니다. 예를 들어'DBH = 2 '로 설정하면'liLn [6]'대신'liLn [DBH]'를 쓸 수 있습니다. – martineau

답변

9

문자열에서 큰 따옴표를 제거해야합니다. 그러면 float()이 변환 할 수있는 합법적 인 부동 소수점 문자열을 제공합니다.

+5

하하! 고마워, 그게 효과가있어. 내 dunce 모자를 쓰고 잠시 모퉁이에 앉아있을거야. – cfwschmidt

관련 문제