在文件中查找字符串[重复]

Posted

技术标签:

【中文标题】在文件中查找字符串[重复]【英文标题】:Finding string in a file [duplicate] 【发布时间】:2016-07-31 04:56:40 【问题描述】:

第一次真正使用文件和 I/O。我正在通过测试仪运行我的代码,并且测试仪通过我的代码调用我正在使用的不同文件。因此,为此,我将文件表示为下面的“文件名”,并将我在该文件中查找的字符串表示为“s”。我很确定我正在浏览代码行并正确搜索字符串。这就是我所拥有的:

def locate(filename, s):

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

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

【问题讨论】:

【参考方案1】:

这些是问题所在

for s in line:
    if s in line:

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

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")

【讨论】:

【参考方案2】:

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

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

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

[1, 3]

【讨论】:

您是要返回[i]吗?我想你只是想要i 问题指出返回值应该是一个列表:“返回我要查找的字符串作为列表所在的行号”。当然,如果首选整数,那么它应该是i,正如你所建议的那样。 啊!我认为它是项目和索引一起。 可能很难说,因为没有首选输出示例。行号和行内容显然是return [i, line] 结论。不清楚:P【参考方案3】:

您可以使用enumerate

示例文本文件

hello hey s hi
hola
s

代码

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

输出

[0, 2]

我们可以看到,第 0 行和第 2 行上的字符串 s注意计算机从 0 开始计数

发生了什么

    以读取权限打开文件。

    遍历每一行,enumerateing 他们,并跟踪line_num 中的行号。

    遍历行中的每个单词。

    如果您传递给函数的letter_to_findword 中,它会将line_num 附加到locations

    返回locations

【讨论】:

以上是关于在文件中查找字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux递归查找具有给定字符串的文件名[重复]

字符串查找(重复次数)

正则表达式 - 从 HTML 文件中查找各种字符串 [重复]

从sed中的文本文件中查找并替换多个字符串[重复]

使用grep和sed递归查找和替换所有文件中的字符串[重复]

在 GIT 中查找添加了特定字符串的提交 [重复]