我想在大文本中搜索字符串并检索其行号。 是否有一个方法在python中不包含2个for循环。
答案 0 :(得分:5)
for i, line in enumerate(filehandle, 1):
if text in line:
print i, line
答案 1 :(得分:1)
您可以使用filter
过滤掉它。提供一个lambda函数,对于你想要的条件是真实的(例如,这里它与行匹配)。
作为第二个参数,给出要检查的所有行的列表(迭代器)。
请注意,我使用izip
来获得lambda函数的(line, line-number)
元组的迭代器。
请找到以下功能:
如您所见,此处的限制是,这仅适用于行数少于2^31 - 1
的文件。
另请注意,它会返回所有匹配行的行号列表。
from itertools import izip
def find_line_num_in_file(file, line):
f = open(file, "r")
matches = filter(lambda x: line in x[0], izip(f.readlines(), xrange(-1 + 2**31)))
f.close()
return [m[1] for m in matches]
如果你碰巧拥有了这些行(即不是迭代器),你可以这样做。
def find_line_num_in_lines(lines, line):
matches = filter(lambda x: line in x[0], zip(lines, range(len(lines))))
return [m[1] for m in matches]
答案 2 :(得分:0)
这应该给你索引
In [112]: lines = filehandle.readlines()
In [113]: for elem in lines:
.....: if elem.find(substr) > -1:
.....: print lines.index(elem)
.....:
包括substr
多次出现的所有索引In [122]: text = ['abc', 'def', 'ghi']
In [123]: for elem in text:
.....: if elem.find('e') > -1:
.....: print text.index(elem)
.....:
1
答案 3 :(得分:-2)
try:
lstLines = fileHandle.readlines():
lineNumber = lstLines.index("strSearch")
except:
print "not found"