2014-03-26 45 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: