Python3:在文件中查找短语(字符串)

时间:2014-03-21 16:12:47

标签: python python-3.x

我有点困惑,希望你能帮忙......

我的总体任务是确定.txt文件是否包含行'**** Optimisation achieved ****'。如果是,请选择opt =' Y'。除非关闭文件,否则不要做任何其他事情。

我看过this question,但我对一些答案有点麻烦:
我定义了函数test(),这样当它被调用时,我将要搜索的短语和文件名传递给它。在test()内,我打开文件并在其中对行进行编号。

def test(phrase, filename):
    with open(filename, 'r') as f:
         for num, line in enumerate (f,1):

正是在这一点上,我遇到了问题并且有点困惑。以下内容基于@Dr jimbob给出的答案并使用if phrase in f:,并返回N

            if phrase in f:
                return 'Y'
            else:
                return 'N'

opt = test('****Optimisation achieved ****', file.txt)
print(opt)

[N.B。如果我跳过文件行编号的行

,也会出现同样的情况

但是,如果我使用以下基于@suzanshakya给出的答案并使用if phrase in line:并返回Y

            if phrase in line:
                return 'Y'
            else:
                return 'N'

opt = test('****Optimisation achieved ****', file.txt)
print(opt)

我对两者使用了相同的.txt文件,它肯定包含行****Optimisation achieved****

由于第一个更类似于我想要做的事情,所以任何正确方向的刺激都会被感激地接受 - 尽管我会耐心等待,因为我的编程非常基础

1 个答案:

答案 0 :(得分:2)

如果您不需要行号,则无需使用enumerate()。

此功能会将整个文件读入text,然后搜索 text以查看其中是否有phrase

def test(phrase, filename):
    phrase = phrase.strip()
    with open(filename, 'r') as f:
        text = f.read()
    if phrase in text:
        return 'Y'
    else:
        return 'N'

此函数逐行读取文件(遍历文件)并返回' Y'如果它在一行中找到phrase。如果它到达文件末尾,则返回N'

def test(phrase, filename):
    phrase = phrase.strip()
    with open(filename, 'r') as f:
        for line in f:
            if phrase in line:
                return 'Y'
        return 'N'

要么工作。

  • 第一个可能具有速度优势,因为它只访问文件一次,并且在内存中搜索该短语。
  • 第二个优点是保持内存足迹小。