2014-03-26 7 views
2

이 스크립트를 작성하여 내 .txt 파일에서 90 % 이상의 ID 값을 추출했습니다. 그러나이 프로그램은 예를 들어 100.05와 같이 100.00보다 높은 값을 고려하지 않습니다. 이유는 무엇입니까?값이 90 % 이상인 열 추출

import re 
output=open('result.txt','w') 
f=open('file.txt','r') 
lines=f.readlines() 
for line in lines: 
    new_list=re.split(r'\t+',line.strip()) 
    id_per=new_list[2] 
    if id_per >= '90': 
     new_list.append(id_per) 
     output.writelines(line) 
f.close() 
output.close() 

입력 파일 예제

A 99.12 
B 93.45 
C 100.00 
D 100.05 
E 87.5 
+0

'및 id_per <= 100'을 ?? – devnull

답변

3

당신은 floats하지 strings로 비교해야한다. 뭔가 다음과 같이 파이썬은 numbers 당신이 그 (것)들을 numbers으로 해석하고자하더라도 strings로 해석되는 비교 때문에

import re 
output=open('result.txt','w') 
f=open('file.txt','r') 
lines=f.readlines() 
for line in lines: 
    new_list=re.split(r'\t+',line.strip()) 
    id_per=new_list[2] 
    if float(id_per) >= 90.0: 
     new_list.append(id_per) 
     output.writelines(line) 
f.close() 
output.close() 

이입니다. strings의 경우 python은 ASCII 또는 Unicode 규칙을 사용하여 문자를 비교합니다. 따라서 코드에서 아무런 오류도 발생시키지 않지만 string 규칙 대신 float 규칙을 사용하여 실행되는 방식으로 실행되지 않습니다.

+2

ValueError : 밑이 10 인 '99 .12 '인 int()에 대한 리터럴이 잘못되었습니다. int (id_per) 대신 float (id_per)를 사용했는데, 괜찮다고 생각합니까? – user3224522

+1

@ user3224522, 예, 그들은 수레입니다. 네, 괜찮을 겁니다. – sshashank124

+0

@ user3224522, 미안 그 딸꾹질에 대한, 나는 그에 따라 내 대답을 조정했습니다. – sshashank124

0

당신은 문자열 비교를 사용하는 - 나는 그것이 950 작동 내기 (90)보다 어휘 100

는 @ sshashank124의 대답에 대안으로 '90'

1

주위에 따옴표를 제거하기입니다 ... 줄이 단순한 형식이라면 간단한 문자열 조작을 사용할 수 있습니다.

output=open('result.txt','w') 
f=open('file.txt','r') 
for line in f: 
    words = line.split() 
    num_per=words[1] 
    if float(num_per) >= 90: 
     new_list.append(num_per) 
     output.writelines(line) 
f.close() 
output.close() 
1
파이썬은 dynamicaly입니다

하지만 강하게 언어를 입력했습니다. 따라서 90'90'은 완전히 다른 것들입니다. 하나는 정수이고 다른 하나는 문자열입니다.

당신은 문자열 및 문자열 비교를 비교하고

, '90''100.05' (문자열은 문자로 characted 및 '9'보다 큰 '1'입니다 비교되며)보다 "더 큰"입니다. 그래서 당신이해야 할 것입니다 : 수

  1. 변환 id_per
  2. , 90에 아니라 그것을 비교 (당신이 원하는거야 아마 소수 자릿수에 대해 신경으로, 수레) 코드에서 '90'

:

id_per = float(new_list[2]) 
if id_per >= 90: 
관련 문제