Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在txt文件中查找行号或元素_Python_Find_Line - Fatal编程技术网

Python 在txt文件中查找行号或元素

Python 在txt文件中查找行号或元素,python,find,line,Python,Find,Line,我想在.txt文件中找到某个元素的行号 我创建了一个example.txt文件来显示在这里,我编写的代码只处理它的第一行。 然而,对于一个真实的文件,它找不到任何东西,但编译时没有问题 #创建一个示例文件 示例=np.数组([[1.0,2.1e-06,3.3],[5.0,6.3,7.8e-03]) filename='/home/Desktop/example.txt' np.savetxt(文件名,示例,header='exmpl') #在txt文件中查找查找值的行号 查找='2.1e-06

我想在.txt文件中找到某个元素的行号

我创建了一个example.txt文件来显示在这里,我编写的代码只处理它的第一行。 然而,对于一个真实的文件,它找不到任何东西,但编译时没有问题


#创建一个示例文件
示例=np.数组([[1.0,2.1e-06,3.3],[5.0,6.3,7.8e-03])
filename='/home/Desktop/example.txt'
np.savetxt(文件名,示例,header='exmpl')
#在txt文件中查找查找值的行号
查找='2.1e-06'
以fp形式打开(文件名):
对于num,枚举(fp)中的行:
如果在行中查找:
打印(个)
打破

您正在比较两个字符串,当您将np数组保存到文本文件时,
e
之前的精度会发生变化,即使值是相同的字符串不匹配

我已经想出了这个解决办法。我不是numpy和python的高手,但我知道一些技巧。请随意提出更优雅或更明显的方法

import numpy as np
#create an example file
example=np.array([[1.0, 2.1e-06, 3.3], [5.0, 6.3, 7.8e-03]]) 


filename='/home/Desktop/example.txt'

np.savetxt(filename, example,  header ='exmpl')

#find the line number of a lookup value in the txt file

lookup = 5.0e-00


with open(filename) as fp:
    for num, line in enumerate(fp):
        for i in line.split():
            #print(i)
            try:
                if float(i) == lookup:
                    print(num)
            except ValueError as e:
                pass

这是因为默认情况下,numpy使用尾随小数保存值:

0 # example

1 1.000000000000000000e+00 2.099999999999999799e-06 3.299999999999999822e+00

2 5.000000000000000000e+00 6.299999999999999822e+00 7.799999999999999642e-03
因此,请尝试明确查找该浮动:

lookup=2.1e-06
打开(文件名)为fh时:
#箕斗式掘进机
_=下一个(fh)
对于i,枚举中的行(fh,开始=1):
数字=列表(映射(float,line.split())
如果按数字查找:
打破
印刷品(一)
或者,使用
过滤器
操作符:

lookup=2.1e-06
打开(文件名)为fh时:
#箕斗式掘进机
_=下一个(fh)
对于i,枚举中的行(fh,开始=1):
check=next(过滤器(查找.\uuuuueq\uuuuuuuu,映射(float,line.split()),无)
#如果迭代器耗尽,则检查将为“无”(无匹配)
#否则,它将在第一个True处停止
如果“检查”不是“无”:
打印(支票)
打破