我有一个文本文件如下,有2列
44333373 -5.829738285
3007762 -5.468521083
16756295 -5.247183569
46197456 -5.216096421
46884567 -5.195179321
44333390 -5.162411562
44420579 -5.133122186
6439190 -5.028260409
...
我想提取大于-5.162411562理想输出的值
输出
44333373 -5.829738285
3007762 -5.468521083
16756295 -5.247183569
46197456 -5.216096421
46884567 -5.195179321
为了完成这个任务,我编写了简单的python脚本
f1=open("file.txt","r")
n=0
for line in f1.readlines():
if float(n) > -5.162411562:
print line
但它只是读取文件中的所有数据。我知道这是一项非常简单的任务,但我无法弄清楚我哪里出错了。有人可以帮忙吗?
答案 0 :(得分:2)
嗯,您需要将n
实际设置为零以外的值。怎么样:
with open('file.txt') as f1:
for line in f1: # readlines is not necessary here
n = float(line.split()[1]) # line.split()[0] is the first number
if n > -5.162411562:
print (line.rstrip('\r\n')) # rstrip to remove the existing EOL in line
答案 1 :(得分:0)
line
包含44333373 -5.829738285
。在循环lines
时,你需要分割线和&考虑第一个要素&你不需要n
。然后比较。所以代码更改为 -
f1=open("file.txt","r")
for line in f1.readlines():
if float(line.split()[1]) > -5.162411562:
print line
这里稍作修改。 readlines
一次性将整个文件内容读入内存。如果文件太大,那么你可能会遇到问题。 python中的文件操作符是一个迭代器。多么酷啊!此外,open
默认情况下会以read
模式打开文件。因此代码进一步简化为 -
for line in open('file.txt'):
if float(line.split()[1]) > -5.162411562:
print line
希望这会有所帮助......
答案 2 :(得分:0)
您提供的代码的问题是n
的值永远不会更改,因此if
语句将始终评估为True
,因此line
将被打印:
f1=open("file.txt","r")
n=0 # the `n` is set here
for line in f1.readlines():
if float(n) > -5.162411562: # `n` is always `0`, so this is always `True`
print line
您需要使用从每行第二列中提取的数字更新变量n
。
此外,if
条件必须将其比较运算符从>
(大于)更改为<
(小于),因为您在输出中显示的值是值“小于-5.162411562”,而不是“大于”
此外,应注意n=0
并非必需。
通过这些更改,我们得到以下代码:
f1 = open("file.txt","r")
for line in f1.readlines():
n = line.split()[1] # get the second column
if float(n) < -5.162411562: # changed the direction comparison
print line.rstrip() # remove the newline from the line read
# from the file to prevent doubling of newlines
# from the print statement
f1.close() # for completeness, close the file
结果输出为:
44333373 -5.829738285
3007762 -5.468521083
16756295 -5.247183569
46197456 -5.216096421
46884567 -5.195179321