python查找内容在文件中的第几行(利用了滑动窗口)

python 复制代码
    def find_multiline_content(file_path, multiline_content):
        with open(file_path, 'r') as file:
            # 文件内容
            file_lines = file.readlines()
        # 待检测内容
        multiline_lines = multiline_content.strip().split('\n')
        # 待检测内容总行数
        num_multiline_lines = len(multiline_lines)
        matching_lines = []
        for i in range(len(file_lines) - num_multiline_lines + 1):
            window = file_lines[i:i + num_multiline_lines]
            # all() 函数接受一个可迭代对象作为参数,仅当可迭代对象中的所有项的计算结果为 True,或可迭代对象为空时才返回 True。在所有其他情况下,all() 函数返回 False
            if all(multiline_lines[j].strip() == window[j].strip() for j in range(num_multiline_lines)):
                matching_lines.append(i + 1)
        return matching_lines

window为一个滑动窗口,可以滑动的次数为【文件总行数 - 内容的行数】:

例如文件总共为10行,而内容行数为5行,那么滑动的次数为5次(for i in range(len(file_lines) - num_multiline_lines + 1)的i即为滑动次数)。

我们可以看到①号,从1开始,可以从数字2(滑动1次),滑到数字6(滑动5次)

相关推荐
XY_墨莲伊3 分钟前
【编译原理】实验二:基于有穷自动机FA词法分析器设计与实现
c语言·开发语言·c++·python
qq_4523962310 分钟前
【工程实战】第三篇:接口自动化 —— Requests 的工业级封装:Session 关联、日志与断言
python·自动化
2401_8971905521 分钟前
html标签怎么设置段落间距_p标签默认样式及调整建议【指南】
jvm·数据库·python
Java面试题总结22 分钟前
BCrypt密码加密
开发语言·python
2301_8035389522 分钟前
如何修改Oracle用户密码_ALTER USER IDENTIFIED BY重置口令
jvm·数据库·python
NotFound48629 分钟前
Golang方法值接收者和指针接收者区别_Golang方法接收者教程【实战】
jvm·数据库·python
m0_6403093036 分钟前
Golang Gin怎么绑定JSON参数_Golang Gin JSON绑定教程【精通】
jvm·数据库·python
databook40 分钟前
用Manim实现动态交点计算--从一个动点问题说起
python·动效
2301_7641505642 分钟前
CSS如何用Less实现多维度的样式复用_结合混合与继承技术实现
jvm·数据库·python
清平乐的技术专栏43 分钟前
Python依赖包实现window下载上传到Linux
linux·开发语言·python