您可以帮我解决以下代码:
#! /usr/bin/env python
stop = "0"
while(stop == "0"):
infile = open(raw_input("Enter input filename: "), 'r')
outfile = open(raw_input("Enter output filename: "), 'w')
err = raw_input("Give max intensity: ")
outfile.write("#" + "\n")
for line in infile.readlines()[1:]:
line = line.strip()
line_col = line.split()
if line_col[3] <= err:
outfile.write(line + "\n")
else:
del line
stop = raw_input("Would like to quit the program? Yes = 1 No = 0: ")
infile.close()
outfile.close()
这里的想法是读取一个包含5列数据的文件。在提示用户输入数字(错误)后,如果文件第4列中的数字高于“错误”,则用于删除一行数据。
问题在于,由于某些原因,并未删除所有相应的行。如果err = 500,则将删除500以上的所有3位数字(例如653.61511,989.76770,614.62500等...),但是那些有4位数字的数字(例如1001.15637,1628.09155,2444.60400等...)不会!
我正在使用的文件如下:
-8.0 4.0 3.695 265.81021 265.8102
-8.0 4.0 3.721 274.50510 274.5051
-8.0 4.0 3.746 285.87451 285.8745
-8.0 4.0 3.771 301.65869 301.6587
-8.0 4.0 3.796 324.28391 324.2839
-8.0 4.0 3.821 356.89609 356.8961
-8.0 4.0 3.846 405.96741 405.9674
-8.0 4.0 3.872 488.77600 488.7760
-8.0 4.0 3.897 653.61511 653.6151
-8.0 4.0 3.922 1001.15637 1001.1564
-8.0 4.0 3.947 1628.09155 1628.0916
-8.0 4.0 3.972 2444.60400 2444.6040
-8.0 4.0 4.023 3092.76880 3092.7688
-8.0 4.0 4.048 2488.82031 2488.8203
-8.0 4.0 4.073 1653.13733 1653.1373
-8.0 4.0 4.098 989.76770 989.7677
-8.0 4.0 4.123 614.62500 614.6250
我绝不是python中的编码专家,所以对此事的任何帮助都将不胜感激......
答案 0 :(得分:3)
问题不在于del
- 顺便说一句,这里没有做任何事情 - 比较两个字符串。
打开Python解释器并编写:
"1001" < "3"
你会回来True
。这是因为Python正在对两个字符串进行字典比较。你想要的是比较两个数字,如:
1001 < 3
正如我们所期望的那样,回复False
。
在您的代码中,line_col[3]
是一个字符串,err
也是如此,因此Python会进行第一种比较。您需要将两者都转换为数字,以便通过写作来获得您想要的行为,例如:float(line_col[3]) < float(err)
。