使用difflib实现文件差异比较用html显示

news2024/11/15 23:38:50

1.默认方式,其中加入文本过长,需要换行,因此做

content=html_output.replace('</style>','table.diff td {word-wrap: break-word;white-space: pre-wrap;max-width: 100%;}</style>'),添加换行操作
ps:当前text1输入是列表格式,返回是按照行形式(如果text1输入的是字符串,返回是按照形式)
#coding:utf-8
import difflib

text1 = '''尊敬的韦尔总理、尊敬的汉恩党委书记、王省长、总领事、
女士们和先生们,
今天我非常高兴与你们共同庆祝40年的伙伴关系。'''.splitlines(keepends=True)
#
text2 = '''尊敬的韦尔总理,汉恩党委书记,王省长,总领事,
女士们,先生们,
今天我很高兴与你们一起庆祝四十年的伙伴关系。'''.splitlines(keepends=True)
html_diff = difflib.HtmlDiff()
html_output = html_diff.make_file(text1, text2)

content=html_output.replace('</style>','table.diff td {word-wrap: break-word;white-space: pre-wrap;max-width: 100%;}</style>')
with open('diff_output_huanhang.html', 'w',encoding="utf-8") as fw:
    fw.write(content)

案例展示:

2.方式1直接调用difflib.HtmlDiff()存在一个问题,在复杂场景下不能针对文本很好的比对(小伙伴们有好的方案可以推荐,当前输入字符串按列展示没有问题,但看着不舒服),因此使用diff_match_patch或者difflib.SequenceMatcher,进行修改,当前以diff_match_patch演示

#coding:utf-8
import diff_match_patch
def read(file):
    with open(file, 'r', encoding="utf-8") as fr:
        content=fr.read()
    return content

html_cont = read("diff_baseline.html")

text1 = '''尊敬的韦尔总理、汉恩党委书记、王省长、总领事、女士们和先生们,今天我非常高兴与你们共同庆祝40年的伙伴关系。我们作为AHK只做了三十年。我认为这是一个感谢前任的机会,他们为这种伙伴关系付出了很多努力。这种伙伴关系不仅存在于纸面上,还存在于实践中。我认为目前是我们塑造未来40年的关键时期,这可能比过去40年更加困难。因为中国在不断变化,所以我们设法找到并利用共同的潜力。今天政治领导人在这里向我们发出明确信号,即伙伴关系符合双方利益。我还要指出,总理。创新的公司表示愿意参与这个地区的发展,寻找并实施市场潜力。作为AHK,我们已经帮助了30年,同时我们在德国的组织和工商会也在尽我们所能支持德国公司。说话人E:我很高兴你今天发起了这个会议,我们的公司可以与中国公司见面,在那里他们可以互相交谈。他们可以达成交易的地方,我相信我们都同意,未来40年只有我们继续好好交谈、合作、做生意才会越来越好。我祝愿所有与会者和会议取得圆满成功。谢谢。
'''
text2 = '''尊敬的韦尔总理,尊敬的汉恩党委书记,王省长,总领事,女士们,先生们,今天我很高兴与你们一起庆祝四十年的伙伴关系。我们作为ahk只做了三十年。尽管如此,我认为这也是一个很好的机会来感谢我们的前任,他们为这一伙伴关系付出了如此多的努力。这种伙伴关系不仅存在于纸面上,而且存在于实践中。我认为现在是我们塑造未来四十年的时候了,我认为这可能比过去四十年要困难一些。因为我们变了。中国变了。我们会不断地改变。然而,我们一次又一次地设法找到并利用共同的潜力。由于政治领导人今天在这里向我们发出了明确的信号,即伙伴关系符合我们双方的利益,我还要指出,你,总理,带来了创新的公司,他们表现出愿意参与这个地区,这个地区,寻找市场潜力,不仅谈论潜力,而且实施潜力。作为ahk,我们已经帮助了三十年,当然还有我们在德国的组织,工商会,尽我们所能支持德国公司。eben-partner to find。我很高兴你今天发起了这个会议,在那里我们的公司可以与中国公司见面,在那里他们可以互相交谈。他们可以达成交易的地方,因为我相信我们都同意,未来四十年,只有我们继续好好交谈,好好合作,好好做生意,才会好起来。我祝愿所有与会者今天取得圆满成功,并祝愿会议取得圆满成功。谢谢,谢谢
'''
dmp = diff_match_patch.diff_match_patch()
diffs = dmp.diff_main(text1, text2)
print(diffs)
a="<td>"
b="<td>"
for i in diffs:
    if i[0]==0:
        a+=i[1]
        b+=i[1]
    if i[0]==-1:
        a+='<span class="diff_chg">{}</span>'.format(i[1])
    if i[0]==1:
        b+='<span class="diff_chg">{}</span>'.format(i[1])
a+="</td>"
b+="</td>"

one='<tr><td class="diff_next" id="difflib_chg_to0__0"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="from0_1">1</td>{}<td class="diff_next"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="to0_1">1</td>{}</tr>'.format(a,b)

html_cont=html_cont.replace("</tbody>",one+"</tbody>")


# 将HTML差异保存到文件中
with open('diff_output.html', 'w', encoding='utf-8') as f:
    f.write(html_cont)

样例展示:

构建html格式


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>
    <meta http-equiv="Content-Type"
          content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
        table.diff {font-family:Courier; border:medium;}
        .diff_header {background-color:#e0e0e0}
        td.diff_header {text-align:right}
        .diff_next {background-color:#c0c0c0}
        .diff_add {background-color:#aaffaa}
        .diff_chg {background-color:#ffff77}
        .diff_sub {background-color:#ffaaaa}
    table.diff td {word-wrap: break-word;white-space: pre-wrap;max-width: 100%;}</style>
</head>

<body>
    
    <table class="diff" id="difflib_chg_to0__top"
           cellspacing="0" cellpadding="0" rules="groups" >
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        
        <tbody>

        </tbody>
    </table>
    <table class="diff" summary="Legends">
        <tr> <th colspan="2"> Legends </th> </tr>
        <tr> <td> <table border="" summary="Colors">
                      <tr><th> Colors </th> </tr>
                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
                      <tr><td class="diff_chg">Changed</td> </tr>
                      <tr><td class="diff_sub">Deleted</td> </tr>
                  </table></td>
             <td> <table border="" summary="Links">
                      <tr><th colspan="2"> Links </th> </tr>
                      <tr><td>(f)irst change</td> </tr>
                      <tr><td>(n)ext change</td> </tr>
                      <tr><td>(t)op</td> </tr>
                  </table></td> </tr>
    </table>
</body>

</html>

3.当前以difflib.SequenceMatcher演示

#coding:utf-8
import difflib, re
def read(file):
    with open(file, 'r', encoding="utf-8") as fr:
        content=fr.read()
    return content
html_cont = read("diff_baseline.html")
# 比较两个文本差异点
def compare_text_index(text1, text2):
    # 创建SequenceMatcher对象
    matcher = difflib.SequenceMatcher(a=text1, b=text2)
    # 获取差异报告
    diff_report = matcher.get_opcodes()
    index_info=[]
    # 检查差异报告中是否存在关键词错误
    for tag, i1, i2, j1, j2 in diff_report:
        index_info.append([tag, i1, i2, j1, j2])
    return index_info


text1 = '''尊敬的韦尔总理、汉恩党委书记、王省长、总领事、女士们和先生们,今天我非常高兴与你们共同庆祝40年的伙伴关系。我们作为AHK只做了三十年。我认为这是一个感谢前任的机会,他们为这种伙伴关系付出了很多努力。这种伙伴关系不仅存在于纸面上,还存在于实践中。我认为目前是我们塑造未来40年的关键时期,这可能比过去40年更加困难。因为中国在不断变化,所以我们设法找到并利用共同的潜力。今天政治领导人在这里向我们发出明确信号,即伙伴关系符合双方利益。我还要指出,总理。创新的公司表示愿意参与这个地区的发展,寻找并实施市场潜力。作为AHK,我们已经帮助了30年,同时我们在德国的组织和工商会也在尽我们所能支持德国公司。说话人E:我很高兴你今天发起了这个会议,我们的公司可以与中国公司见面,在那里他们可以互相交谈。他们可以达成交易的地方,我相信我们都同意,未来40年只有我们继续好好交谈、合作、做生意才会越来越好。我祝愿所有与会者和会议取得圆满成功。谢谢。
'''

text2 = '''尊敬的韦尔总理,尊敬的汉恩党委书记,王省长,总领事,女士们,先生们,今天我很高兴与你们一起庆祝四十年的伙伴关系。我们作为ahk只做了三十年。尽管如此,我认为这也是一个很好的机会来感谢我们的前任,他们为这一伙伴关系付出了如此多的努力。这种伙伴关系不仅存在于纸面上,而且存在于实践中。我认为现在是我们塑造未来四十年的时候了,我认为这可能比过去四十年要困难一些。因为我们变了。中国变了。我们会不断地改变。然而,我们一次又一次地设法找到并利用共同的潜力。由于政治领导人今天在这里向我们发出了明确的信号,即伙伴关系符合我们双方的利益,我还要指出,你,总理,带来了创新的公司,他们表现出愿意参与这个地区,这个地区,寻找市场潜力,不仅谈论潜力,而且实施潜力。作为ahk,我们已经帮助了三十年,当然还有我们在德国的组织,工商会,尽我们所能支持德国公司。eben-partner to find。我很高兴你今天发起了这个会议,在那里我们的公司可以与中国公司见面,在那里他们可以互相交谈。他们可以达成交易的地方,因为我相信我们都同意,未来四十年,只有我们继续好好交谈,好好合作,好好做生意,才会好起来。我祝愿所有与会者今天取得圆满成功,并祝愿会议取得圆满成功。谢谢,谢谢
'''
a="<td>"
b="<td>"
chayi=compare_text_index(text1, text2)
for effect in chayi:
    print(effect)
    if effect[0]=="equal":
        a+=text1[effect[1]:effect[2]]
        b+=text2[effect[3]:effect[4]]
    if effect[0]=="replace":
        # a+=text1[effect[1]:effect[2]]
        # b+=text2[effect[3]:effect[4]]
        a+='<span class="diff_chg">{}</span>'.format(text1[effect[1]:effect[2]])
        b += '<span class="diff_chg">{}</span>'.format(text2[effect[3]:effect[4]])
    if effect[0]=="insert":
        # a+=text1[effect[1]:effect[2]]
        # b+=text2[effect[3]:effect[4]]
        a += '<span class="diff_add">{}</span>'.format(text1[effect[1]:effect[2]])
        b += '<span class="diff_add">{}</span>'.format(text2[effect[3]:effect[4]])
    if effect[0]=="delete":
        # a+=text1[effect[1]:effect[2]]
        # b+=text2[effect[3]:effect[4]]
        a += '<span class="diff_sub">{}</span>'.format(text1[effect[1]:effect[2]])
        b += '<span class="diff_sub">{}</span>'.format(text2[effect[3]:effect[4]])


a+="</td>"
b+="</td>"

one='<tr><td class="diff_next" id="difflib_chg_to0__0"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="from0_1">1</td>{}<td class="diff_next"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="to0_1">1</td>{}</tr>'.format(a,b)

html_cont=html_cont.replace("</tbody>",one+"</tbody>")

# 将HTML差异保存到文件中
with open('difflib_output.html', 'w', encoding='utf-8') as f:
    f.write(html_cont)

案例展示:

4.同理将多个文本按行比对:

#coding:utf-8
import diff_match_patch
def read(file):
    with open(file, 'r', encoding="utf-8") as fr:
        content=fr.read()
    return content

html_cont = read("diff_baseline.html")

text11 = read("text1.txt").splitlines(keepends=True)

text22 = read("text2.txt").splitlines(keepends=True)

one=""
for id,text1 in enumerate(text11):
    text2=text22[id]
    dmp = diff_match_patch.diff_match_patch()
    diffs = dmp.diff_main(text1, text2)

    if id==0:
        a="<td>"
        b="<td>"
        for i in diffs:
            if i[0]==0:
                a+=i[1]
                b+=i[1]
            if i[0]==-1:
                a+='<span class="diff_chg">{}</span>'.format(i[1])
            if i[0]==1:
                b+='<span class="diff_chg">{}</span>'.format(i[1])
        a+="</td>"
        b+="</td>"
        print(a)
        print(b)
        one+='<tr><td class="diff_next" id="difflib_chg_to0__0"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="from0_1">1</td>{}<td class="diff_next"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="to0_1">1</td>{}</tr>'.format(a,b)
    if id>0:
        a = "<td>"
        b = "<td>"
        for i in diffs:
            if i[0] == 0:
                a += i[1]
                b += i[1]
            if i[0] == -1:
                a += '<span class="diff_chg">{}</span>'.format(i[1])
            if i[0] == 1:
                b += '<span class="diff_chg">{}</span>'.format(i[1])
        a += "</td>"
        b += "</td>"
        print(a)
        print(b)
        one += '<tr><td class="diff_next"></td><td class="diff_header" id="from0_{}">{}</td>{}<td class="diff_next"></td><td class="diff_header" id="to0_{}">{}</td>{}</tr>'.format(id+1,id+1,a,id+1,id+1, b)

html_cont=html_cont.replace("</tbody>",one+"</tbody>")


# 将HTML差异保存到文件中
with open('diff_output1.html', 'w', encoding='utf-8') as f:
    f.write(html_cont)

#coding:utf-8
import diff_match_patch,difflib
def read(file):
    with open(file, 'r', encoding="utf-8") as fr:
        content=fr.read()
    return content
# 比较两个文本差异点
def compare_text_index(text1, text2):
    # 创建SequenceMatcher对象
    matcher = difflib.SequenceMatcher(a=text1, b=text2)
    # 获取差异报告
    diff_report = matcher.get_opcodes()
    index_info=[]
    # 检查差异报告中是否存在关键词错误
    for tag, i1, i2, j1, j2 in diff_report:
        index_info.append([tag, i1, i2, j1, j2])
    return index_info


html_cont = read("diff_baseline.html")

text11 = read("text1.txt").splitlines(keepends=True)

text22 = read("text2.txt").splitlines(keepends=True)

one=""
for id,text1 in enumerate(text11):
    text2=text22[id]
    chayi=compare_text_index(text1, text2)
    if id==0:
        a="<td>"
        b="<td>"
        for effect in chayi:
            print(effect)
            if effect[0] == "equal":
                a += text1[effect[1]:effect[2]]
                b += text2[effect[3]:effect[4]]
            if effect[0] == "replace":
                # a+=text1[effect[1]:effect[2]]
                # b+=text2[effect[3]:effect[4]]
                a += '<span class="diff_chg">{}</span>'.format(text1[effect[1]:effect[2]])
                b += '<span class="diff_chg">{}</span>'.format(text2[effect[3]:effect[4]])
            if effect[0] == "insert":
                # a+=text1[effect[1]:effect[2]]
                # b+=text2[effect[3]:effect[4]]
                a += '<span class="diff_add">{}</span>'.format(text1[effect[1]:effect[2]])
                b += '<span class="diff_add">{}</span>'.format(text2[effect[3]:effect[4]])
            if effect[0] == "delete":
                # a+=text1[effect[1]:effect[2]]
                # b+=text2[effect[3]:effect[4]]
                a += '<span class="diff_sub">{}</span>'.format(text1[effect[1]:effect[2]])
                b += '<span class="diff_sub">{}</span>'.format(text2[effect[3]:effect[4]])
        a+="</td>"
        b+="</td>"
        print(a)
        print(b)
        one+='<tr><td class="diff_next" id="difflib_chg_to0__0"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="from0_1">1</td>{}<td class="diff_next"><a href="#difflib_chg_to0__top">t</a></td><td class="diff_header" id="to0_1">1</td>{}</tr>'.format(a,b)
    if id>0:
        a = "<td>"
        b = "<td>"
        for effect in chayi:
            print(effect)
            if effect[0] == "equal":
                a += text1[effect[1]:effect[2]]
                b += text2[effect[3]:effect[4]]
            if effect[0] == "replace":
                # a+=text1[effect[1]:effect[2]]
                # b+=text2[effect[3]:effect[4]]
                a += '<span class="diff_chg">{}</span>'.format(text1[effect[1]:effect[2]])
                b += '<span class="diff_chg">{}</span>'.format(text2[effect[3]:effect[4]])
            if effect[0] == "insert":
                # a+=text1[effect[1]:effect[2]]
                # b+=text2[effect[3]:effect[4]]
                a += '<span class="diff_add">{}</span>'.format(text1[effect[1]:effect[2]])
                b += '<span class="diff_add">{}</span>'.format(text2[effect[3]:effect[4]])
            if effect[0] == "delete":
                # a+=text1[effect[1]:effect[2]]
                # b+=text2[effect[3]:effect[4]]
                a += '<span class="diff_sub">{}</span>'.format(text1[effect[1]:effect[2]])
                b += '<span class="diff_sub">{}</span>'.format(text2[effect[3]:effect[4]])
        a += "</td>"
        b += "</td>"
        print(a)
        print(b)
        one += '<tr><td class="diff_next"></td><td class="diff_header" id="from0_{}">{}</td>{}<td class="diff_next"></td><td class="diff_header" id="to0_{}">{}</td>{}</tr>'.format(id+1,id+1,a,id+1,id+1, b)

html_cont=html_cont.replace("</tbody>",one+"</tbody>")


# 将HTML差异保存到文件中
with open('diff_output.html', 'w', encoding='utf-8') as f:
    f.write(html_cont)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1800517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新PHP众筹网站源码 支持报名众筹+商品众筹+公益众筹等多种众筹模式 含完整代码包和部署教程

在当今互联网飞速发展的时代&#xff0c;众筹模式逐渐成为了创新项目、商品销售和公益活动融资的重要渠道。分享一款最新版的PHP众筹网站源码&#xff0c;支持报名众筹、商品众筹和公益众筹等多种众筹模式。该源码包含了完整的代码包和详细的部署教程&#xff0c;让新手也可以轻…

【Mac】Downie 4 for Mac(视频download工具)兼容14系统软件介绍及安装教程

前言 Downie 每周都会更新一个版本适配视频网站&#xff0c;如果遇到视频download不了的情况&#xff0c;请搜索最新版本https://mac.shuiche.cc/search/downie。 注意&#xff1a;Downie Mac特别版不能升级&#xff0c;在设置中找到更新一列&#xff0c;把自动更新和自动downl…

DeepDriving | 多目标跟踪算法之SORT

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;多目标跟踪算法之SORT 1 简介 SORT是2016年发表的一篇文章《Simple Online and Realtime Tracking》中提出的一个经典的多目标跟踪算法&#xff0c;…

纵向导航栏使用navbar-nav-scroll溢出截断问题

项目场景&#xff1a; 组件&#xff1a;Bootstrap-4.6.2、JQuery 3.7.1 测试浏览器&#xff1a;Firefox126.0.1、Microsoft Edge125.0.2535.67 IDE&#xff1a;eclipes2024-03.R 在编写CRM的工作台主页面时&#xff0c;由于该页面使用的是较旧的技术&#xff0c;所以打算使用…

【Java数据结构】二叉树详解(三)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2. 检查两颗树是否相同 3. 另一颗树的子树 4.翻转二叉树 5.对称二叉树 6.判断一颗二叉树是否是平衡二叉树 6.1第一种思路 6.2第二种思路 7.二叉树的构建及…

语音群呼之语音导航的应用

在数字化时代&#xff0c;语音群呼技术已成为企业、组织和个人高效沟通的重要工具。语音群呼不仅能够快速地将信息传递给目标群体&#xff0c;而且通过语音导航功能&#xff0c;还能确保信息传达的准确性和用户体验的优质性。本文将深入探讨语音群呼的语音导航功能&#xff0c;…

HTML:认识HTML与基本语法的学习

前言 HTML&#xff08;超文本标记语言&#xff09;是用于创建网页的标记语言&#xff0c;由一系列标签组成&#xff0c;定义网页中的元素。由蒂姆伯纳斯 - 李于1990年代初发明&#xff0c;最初用于科研机构间共享文档&#xff0c;迅速演变为Web开发基础。无论是电商、博客、新…

一条sql的执行流程

文章地址 https://blog.csdn.net/qq_43618881/article/details/118657040 连接器 请求先走到连接器&#xff0c;与客户端建立连接、获取权限、维持和管理连接 mysql缓存池 如果要查找的数据直接在mysql缓存池里面就直接返回数据 分析器 请求已经建立了连接&#xff0c;现在…

串联式固定测斜仪无需钢丝绳、安装方便、可回收利用边坡基坑矿山地灾常用

一、固定式测斜仪的简介 固定测斜仪是一种用于长期自动监测各种结构物的深层水平位移的设备&#xff0c;获取土体内部的位移变化趋势&#xff0c;监测数据上传至安锐测控云平台&#xff0c;用户即可实时查看结构深层水平位移数据&#xff0c;实时预警&#xff0c;保障结构的安全…

代码随想录算法训练营第四十八 | ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 买卖股票的最佳时机 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Xe4y1u77q https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA.html class Solution { public:int ma…

自友科技破解走班教育排课难题

新高考后&#xff0c;校园教务都面临着晋级&#xff0c;其中走班教育的分班排课是个巨大的挑战。 所以在分班排课的时候要清楚一下几个问题 一是&#xff1a;清楚的核算学生的选考科目。学生选科提交后做好并承认&#xff0c;最好是在分班后不要改或很少的一部分人改动。 二是…

世净超声波清洗机怎么样?美的、希亦、世净超声波清洗机谁更值得买?

在日常生活和专业领域中&#xff0c;清洁工作往往是既重要又烦琐的任务。特别是对于那些难以手工得尤为重要。关键是现在超声波清洗机已经不是从前的超声波清洗机了&#xff0c;不是只在工业领域上清洗一些重大零件了&#xff0c;已经逐渐开始能够清洗日常物品&#xff0c;像眼…

重庆工商大学社会工作专业试题及答案,分享几个实用搜题和学习工具 #媒体#学习方法#知识分享

搜题软件一般都是通过识别题目内容搜索出问题的答案&#xff0c;当识别内容不正确或搜索不到答案时&#xff0c;又得重新到其他软件进行重复的操作&#xff0c;很是麻烦。所以我们可以使用专业的识别工具&#xff0c;对题目内容进行识别&#xff0c;然后把提取出来的内容单独保…

【MySQL数据库】my.ini文件参数中文注释

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

Qsemaphore

Qsemaphore 实现 给while循环阻塞延时 基本思路就是&#xff1a; whlie循环里面 通过m&#xff3f;bthreadFlag&m_bStatus这两个标志位&#xff0c;判断是否进入while循环&#xff0c;再根据40行的acquire&#xff08;&#xff09;来阻塞循环&#xff0c;因为定时器的槽函数…

VCS基本仿真

这里记录三种仿真方式&#xff1a; 第一种是将verilog文件一个一个敲在终端上进行仿真&#xff1b; 第二种是将多个verilog文件的文件路径整理在一个文件中&#xff0c;然后进行仿真&#xff1b; 第三种是利用makefile文件进行仿真&#xff1b; 以8位加法器为例&#xff1a; …

13、SpringBoot 源码分析 - 自动配置深度分析六

SpringBoot 源码分析 - 自动配置深度分析六 refresh和自动配置大致流程AutoConfigurationImportSelector的fireAutoConfigurationImportEvents通知自动配置导入事件AutoConfigurationGroup的selectImports封装成Entry返回MyAutoConfiguration自动配置类创建META-INF文件夹和文件…

js解析成语法树以及还原

const {parse} require("babel/parser"); const traverse require("babel/traverse").default; const generator require("babel/generator").default;// 1.定义要处理的代码 const jscode function square(n) {return n * n; };// 2.使用ba…

c++ EECS280

Introduction Euchre (pronounced “YOO-kur”) is a card game popular in Michigan. The learning goals of this project include Abstract Data Types in C, Derived Classes, Inheritance, and Polymorphism. You’ll gain practice with C-style Object Oriented Progr…

104、二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 题解&#xff1a;所谓深度&#xff0c;就是树中某节点距离根节点的距离&#xff0c;如图中根节点3的深度为1&#xff0c;那节点7的深度为3&#x…