提取值> = 90%的列

时间:2014-03-26 11:38:01

标签: python

我编写了这个脚本来从我的.txt文件中提取具有> = 90%身份的值。但是,该程序没有考虑高于100.00的值,例如100.05,为什么?

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

4 个答案:

答案 0 :(得分:3)

您应该将它们比作floats而不是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()

这是因为python比较将numbers解释为strings,即使您希望它们被解释为numbers。对于strings,python使用ASCIIUnicode规则按字符进行比较。这就是为什么您的代码不会抛出任何错误,但它不会按照您希望使用float规则而不是string规则运行的方式运行。

答案 1 :(得分: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()

答案 2 :(得分:1)

Python是动态的,但是强烈类型的语言。因此90'90'完全不同 - 一个是整数,另一个是字符串。

您正在比较字符串,在字符串比较中,'90'是"更大"比'100.05'(字符串按字符进行比较,'9'大于'1')。 所以你需要做的是:

  1. id_per转换为数字(您可能需要浮点数,因为您关心小数位)
  2. 将其与数字进行比较,即90,而不是'90'
  3. 在代码中:

    id_per = float(new_list[2])
    if id_per >= 90:
    

答案 3 :(得分:0)

你正在使用字符串比较 - 词法上100小于90.我打赌它适用于950 ......

摆脱'90'

周围的引号