我想在大文本中搜索字符串并检索其行号。是否有一种方法不包括 python 中的 2 个 for 循环。
问问题
14310 次
4 回答
6
for i, line in enumerate(filehandle, 1):
if text in line:
print i, line
于 2012-07-19T05:58:45.597 回答
1
你可以用filter
它来过滤掉它。提供一个 lambda 函数,该函数对于您想要的条件是正确的(例如,这里是该行的匹配项)。
作为第二个参数,给出你想要检查的所有行的列表(迭代器)。请注意,我使用izip
, 将(line, line-number)
元组的迭代器指向 lambda 函数。
请在下面找到函数: 如您所见,这里的限制是这仅适用于少于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]
于 2012-07-19T07:14:28.090 回答
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
于 2012-07-19T05:27:13.200 回答
-3
try:
lstLines = fileHandle.readlines():
lineNumber = lstLines.index("strSearch")
except:
print "not found"
于 2012-07-19T05:28:54.470 回答