在Text - python中找到字符串和行号

时间:2012-07-19 05:23:01

标签: python string

我想在大文本中搜索字符串并检索其行号。 是否有一个方法在python中不包含2个for循环。

4 个答案:

答案 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"