关于python:在文件中查找字符串

Finding string in a file

本问题已经有最佳答案,请猛点这里访问。

这里的第一个计时器使用真正的文件和I/O。我正在通过测试仪运行我的代码,测试仪通过我的代码调用我正在使用的不同文件。为此,我在下面将文件表示为"文件名",在该文件中查找的字符串表示为"s"。我很确定我正在浏览代码行并正确地搜索字符串。这就是我想要的:

1
2
3
4
5
6
7
def locate(filename, s):

    file= open(filename)
    line= file.readlines()
    for s in line:
        if s in line:
            return [line.count]

我知道回路线不对。如何将要查找的字符串所在的行的编号作为列表返回?


您可以使用enumerate来跟踪行号:

1
2
3
def locate(filename, s):
    with open(filename) as f:
        return [i for i, line in enumerate(f, 1) if s in line]

如果可以从第一行和第三行找到搜索的字符串,它将生成以下输出:

1
[1, 3]


这些是问题所在

1
2
for s in line:
    if s in line:

您必须将line读入除s以外的另一个变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
def locate(filename, s):

    file= open(filename)
    line= file.readlines()
    index = 0;
    for l in line:
        print l;
        index = index + 1
        if s in l:
            return index


print locate("/Temp/s.txt","s")


您可以使用enumerate

示例文本文件

1
2
3
hello hey s hi
hola
s

代码

1
2
3
4
5
6
7
8
9
def locate(filename, letter_to_find):

    locations = []
    with open(filename, 'r') as f:
        for line_num, line in enumerate(f):
            for word in line.split(' '):
                if letter_to_find in word:
                    locations.append(line_num)
    return locations

产量

1
[0, 2]

如我们所见,它表明字符串s在第0行和第2行。注意计算机从0开始计数

发生什么事

  • 打开具有读取权限的文件。

  • 遍历每一行,enumerate在执行过程中对它们进行迭代,并跟踪line_num中的行号。

  • 循环访问行中的每个单词。

  • 如果传入函数的letter_to_findword中,它将line_num附加到locations中。

  • 返回locations