2009-09-22 11 views
1

파이썬에서 두 개의 문자열 목록을 비교하려고합니다. 문자열의 일부는 숫자이지만 문자열 비교를 위해서만 숫자로 사용하고 싶지 않습니다.파이썬에서 자동으로 문자열 변환하기

나는 파일에서 문자열을 읽고이 같은 목록에 올려 그러나

def main(): 
    inputFileName = 'BateCarteira.csv' 
    inputFile = open(inputFileName, "r") 

    bankNumbers = [] 

    for line in inputFile: 
     values = line[0:len(line)-1].split(';'); 

     if (len(values[0]) > 3): 
      bankNumbers.append(''+values[0]) 

, 내가 번호를 인쇄하려고하면, 그것은 같은 인쇄 :

1,20091E + (11)

인쇄에 대한 코드는 :

print 'not in the list: ' + bankNumber 
    outputFile.write(bankNumber + '-') 

내가 무엇을 할 수 있도록 파이썬의 문자열을 캐스팅하지 int? 내 영어 죄송합니다

: D

+0

csv 파일은 1,20091E + 11로 변환되는 값은 무엇입니까? Int보다 큰 값을 가지고있는 것처럼 들리며 플로트로 변환됩니다. – jmucchiello

+0

인쇄용 코드를 다음과 같이 변경하면 '인쇄'가 목록에 없습니다. '+ bankNumber, (bankNumber)'를 입력하십시오. bankNumber 값의 유형이 인쇄됩니다. 실제로 "str"을 출력하여 문자열 유형이라는 것을 보여줄 것이라고 예측합니다. CSV 파일을 보면 "1,20091E + 11"이라는 문자열이 표시됩니다. 파이썬은 당신에게 물어 보지 않고 문자열을 결코 플로트로 변환하지 않을뿐만 아니라, 파이썬이 플로트를 프린트 할 때 사용하는 포맷이 아닙니다. – steveha

답변

3

파이썬은 숫자로 문자열을 변환하지, 당신은 같은 것을 시도하지 않는 :

s = "1.2" 
a = float(s) 

그래서 내가 .csv 파일은 문자열 "1을 가지고 생각을, 20091E + 11 "안에 있습니다. 또한 소수점이 혼수 상태임을 주목하십시오. 따라서 이것을 float로 변환하려고하면 변환이 실패합니다.

+0

이런 소리가 옳습니다. 입력 파일에 예기치 않은 값이있는 것 같습니다. 독일어와 프랑스어 같은 일부 로케일은 for를 사용합니다. 숫자로. – UberAlex

+0

표준 "로켈"라이브러리 모듈을 살펴볼 수 있습니다. –

+0

그래, 맞아 ... atof 기능도 도움이된다. 언어는 포르투갈어입니다. –

2

로케일 형식의 숫자를 읽으려면 locale 모듈이 필요합니다 (예 : 유럽의 대부분 지역에서 사용되는 십진수 쉼표로).

import locale 
locale.setlocale(locale.LC_ALL, '') 
f = locale.atof("1,20091E+11") 
관련 문제