Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3:在文件中查找短语(字符串)_Python_Python 3.x - Fatal编程技术网

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

Python3:在文件中查找短语(字符串),python,python-3.x,Python,Python 3.x,我有点困惑,希望你能帮我 我的总体任务是确定.txt文件是否包含以下行:“****优化已实现****”。如果是,则使opt='Y'。否则,除了关闭文件外,不要执行任何操作 我已经看过了,但在一些答案上有点问题: 我定义函数test(),这样当调用它时,我会将要搜索的短语和文件名传递给它。在test()中,我打开文件并对其中的行进行编号 def test(phrase, filename): with open(filename, 'r') as f: for num,

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

我的总体任务是确定.txt文件是否包含以下行:
“****优化已实现****”
。如果是,则使opt='Y'。否则,除了关闭文件外,不要执行任何操作

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

def test(phrase, filename):
    with open(filename, 'r') as f:
         for num, line in enumerate (f,1):
正是在这一点上,我有问题,有点困惑。以下内容基于@Dr jimbob给出的答案,在f:中使用
if短语,并返回
N

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

opt = test('****Optimisation achieved ****', file.txt)
print(opt)
[N.B.如果跳过文件行编号所在的行,也会发生同样的情况]

但是,如果我使用以下基于@suzanshakya给出的答案并在第行中使用
if短语:
并返回
Y

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

opt = test('****Optimisation achieved ****', file.txt)
print(opt)
我对这两个文件都使用了相同的.txt文件,它肯定包含一行
****优化实现****

因为第一个与我想做的更为相似,所以任何正确方向的提示都会得到感激——尽管我要求耐心,因为我的编程非常基本

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

此函数将整个文件读入
文本
,然后搜索
文本
,查看其中是否有
短语

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”。如果到达文件末尾,则返回“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'
两者都可以

  • 第一种可能具有速度优势,因为它只访问文件一次,搜索短语在内存中完成
  • 第二种方法的优点是保持内存占用空间小

确保您没有比较两个字符串,一个带尾随空格(
\r\n
),另一个不带。第二种解决方案是最好的,但正如@IceArdor提到的,如果短语在line.strip()中,您应该确保执行
,而不是.hmmm,我想如果
短语
有尾随空格,它会失败,但是
文本中的短语
行中的短语
应该可以工作,只要
短语
实际在
文本
中。编辑以解释短语中可能出现的空白。@wwii这是真的,我错了。我所做的大部分匹配都是
if line.strip()==短语,因为我正在寻找精确的行。干得好!