2014-03-26 118 views
2

我編寫了此腳本以從我的.txt文件中提取具有> = 90%標識的值。但是,這個程序沒有考慮高於100.00的值,例如100.05,爲什麼?提取值大於等於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

你應該把它們比爲floatsstrings。東西如下:

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() 

這是因爲蟒蛇比較被解釋爲numbersstrings即使你希望他們解釋爲numbers。對於strings,python使用ASCIIUnicode規則逐字符進行比較。這就是爲什麼你的代碼不會拋出任何錯誤,但它不會按照你期望的方式運行,而是使用規則float而不是string規則。

+2

它說ValueError:無效文字爲int()與基地10:'99 .12'。我用float(id_per)而不是int(id_per),你認爲這樣可以嗎? – user3224522

+1

@ user3224522,啊,是的,他們是花車。是的,你應該沒問題。 – sshashank124

+0

@ user3224522,對不起,打嗝,我已經相應地調整了我的答案。 – sshashank124

0

您正在使用的字符串比較 - 詞法100小於90。我敢打賭,它適用於950 ...

擺脫圍繞'90'

1

作爲替代的報價爲@ sshashank124的答案,如果你的行有一個簡單的格式,你可以使用簡單的字符串操作;

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

Python是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: 
相關問題