我编写了这个脚本来从我的.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
答案 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使用ASCII
或Unicode
规则按字符进行比较。这就是为什么您的代码不会抛出任何错误,但它不会按照您希望使用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'
)。
所以你需要做的是:
id_per
转换为数字(您可能需要浮点数,因为您关心小数位)90
,而不是'90'
在代码中:
id_per = float(new_list[2])
if id_per >= 90:
答案 3 :(得分:0)
你正在使用字符串比较 - 词法上100小于90.我打赌它适用于950 ......
摆脱'90'