当前位置: 首页 > article >正文

python学习—合并多个word文档

系列文章目录

python学习—合并TXT文本文件
python学习—统计嵌套文件夹内的文件数量并建立索引表格
python学习—查找指定目录下的指定类型文件
python学习—年会不能停,游戏抽签抽奖
python学习—循环语句-控制流
python学习—合并多个Excel工作簿表格文件
python学习—批量复制并重命名文件夹
python学习—详解word邮件合并


文章目录

  • 系列文章目录
  • 功能说明
  • 1 准备工作
  • 2 第一版代码
      • (1) win32com模块
      • (2) 初始化
      • (3) 遍历
      • (4) 保存合并文档
      • (5) 第一版完整代码
  • 3 第二版代码
      • (1) 制作格式化块
      • (2) 插入块
      • (3) 查看运行效果
      • (4) 完善代码
      • (5) 第二版完整代码
  • 4 后记


功能说明

最近有个工作,是某个高速公路的征地项目,涉及高速公路占地的某县下辖的几个乡镇22个村的2000多户村民,每户都要填写一张固定格式的《征地补偿登记表》纸质表,主要记录一些农户基本信息,填写完毕后交给乡镇或村委会指派人员负责转录到固定格式的电子word文档中,再交给我们收集归档。

在收集过程中就出现问题了,发现有些村提交的文档是1个多页文档,每页记录一户村民信息,这种情况我们审核维护就很简单了;然而还有一些村提交的是1户1个文档,如果100户就是100个word文档,这也是可以理解的,毕竟工作量不小有可能是很多人分别录入的。

多人录入就出现了字体不同,字号有差异,个别单元格填写不规范等小问题,既然都交过来,再让他们重新录入也不好,时间也不允许,我审查需要重复打开关闭很是烦人,就想着能否用python编程来实现多个word文档的合并。

首先来看一下《征地补偿登记表》的格式,如下图:

1
从上图可以看到,word文档的主体是一个表格,表格上面有标题行,表格下面有几行内容,整个A4版面布局满满当当,再多一行就会串页了。

根据单页文档的特点,因为单页布局太满,可以预判到合并文档很可能会发生上下串页的问题,可以通过对合并的word文档缩小页边距尝试解决。

本代码目标为:

  • 1 自动读取本地文件夹内多个单页word文档;
  • 2 合并生成1个多页word文档;
  • 3 要求保留原文档的格式不变;
  • 4 串页问题,通过调整页边距解决。
  • 代码运行环境 :python 3.11版本, pycharm 2022.2.5

1 准备工作

我首先准备了15个单页word文档放在同一个目录中,如下图。
2

2 第一版代码

思路是:我第一版思路很简单,就是 打开分户文档——复制内容——粘贴到合并文档。

经过一些失败,反复测试后终于成功实现合并功能。第一版本的代码,主要实现一个合并的操作。

(1) win32com模块

win32com 模块是 Python 中 pywin32 库的一部分,它为 Python 提供了对 Windows 组件对象模型(COM)的访问能力,允许 Python 脚本与支持 COM 接口的 Windows 应用程序进行交互。

win32com 可以让 Python 中自动化操作 Microsoft Office 套件,如 Word、Excel 和 PowerPoint,首先安装模块,从清华大学镜像。

pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/

(2) 初始化

首先调用word程序,创建一个word文档作为合并文档。

    # 初始化 Word 应用程序对象word = win32.gencache.EnsureDispatch('Word.Application')# 隐藏 Word 应用程序窗口word.Visible = False# 创建一个新的 Word 文档用于合并merged_doc = word.Documents.Add()# 将分户文档文件夹folder_path路径转换为 Path 对象folder_path = Path(folder_path)

注意: 这里创建的 merged_doc,是一个中间变量,用来保存过程中复制的内容,最终输出的合并文档为output_file

(3) 遍历

思路是:打开分页文档——复制内容——找文档末尾——粘贴内容——插入分页符——关闭分页文档。
遍历所有分页文档。

   # 遍历文件列表,逐个处理for i, file_path in enumerate(file_list, start=1):# 打开当前 Word 文档current_doc = word.Documents.Open(str(file_path))# 复制当前文档的全部内容current_doc.Content.Copy()# 获取合并文档内容的最后一个字符位置end_position = merged_doc.Content.End - 1# 创建文档范围对象,定位到合并文档的末尾paste_range = merged_doc.Range(end_position)# 将剪贴板中的内容粘贴到合并文档的末尾paste_range.Paste()# 如果不是最后一个文件,插入分页符if i < len(file_list):merged_doc.Range(merged_doc.Content.End - 1).InsertBreak(win32.constants.wdPageBreak)# 关闭当前文档,不保存更改current_doc.Close(False)

(4) 保存合并文档

把中间变量 merged_doc 保存为最终的合并文档,输出 output_file

    # 保存合并后的文档到指定路径merged_doc.SaveAs2(output_file)

中间便令使命结束,关闭中间便令,不保存修改。

    # 关闭合并后的文档,不保存更改merged_doc.Close(False)

这是因为在合并过程中,文档的内容已经被保存到指定的输出文件output_file 中(通过merged_doc.SaveAs2(output_file)),因此不需要中间变量 merged_doc 再次保存更改。
使用False可以避免弹出保存提示框,确保程序自动关闭文档而不进行额外的保存操作。

    # 退出 Word 应用程序word.Quit()

调用windows程序,使用后需要关闭word程序。

(5) 第一版完整代码

from pathlib import Path
import win32com.client as win32def merge_word_documents(folder_path, output_file):# 初始化 Word 应用程序对象word = win32.gencache.EnsureDispatch('Word.Application')# 隐藏 Word 应用程序窗口word.Visible = False# 创建一个新的 Word 文档用于合并merged_doc = word.Documents.Add()# 将文件夹路径转换为 Path 对象folder_path = Path(folder_path)# 获取文件夹中所有 .docx 或 .doc 文件,跳过隐藏文件和临时文件file_list = [f for f in folder_path.iterdir()if f.suffix.lower() in ('.docx', '.doc') and not f.name.startswith('.') and not f.name.startswith('~$')]# 遍历文件列表,逐个处理for i, file_path in enumerate(file_list, start=1):# 打开当前 Word 文档current_doc = word.Documents.Open(str(file_path))# 复制当前文档的全部内容current_doc.Content.Copy()# 获取合并文档内容的最后一个字符位置end_position = merged_doc.Content.End - 1# 创建文档范围对象,定位到合并文档的末尾paste_range = merged_doc.Range(end_position)# 将剪贴板中的内容粘贴到合并文档的末尾paste_range.Paste()# 如果不是最后一个文件,插入分页符if i < len(file_list):merged_doc.Range(merged_doc.Content.End - 1).InsertBreak(win32.constants.wdPageBreak)# 关闭当前文档,不保存更改current_doc.Close(False)# 保存合并后的文档到指定路径merged_doc.SaveAs2(output_file)# 关闭合并后的文档,不保存更改merged_doc.Close(False)# 退出 Word 应用程序word.Quit()if __name__ == "__main__":# 指定包含 Word 文档的文件夹路径folderpath = 'E:/test/python3/小程序/分户合并/分户'outputfile = 'E:/test/python3/小程序/分户合并/合并.docx'merge_word_documents(folderpath, outputfile)print('合并完成')

在完整代码中增加的 跳过隐藏文件和临时文件 的语句,因为 打开word文件会产生 ~$开头的 缓存文件,这些缓存文件是隐藏文件。

结果如下图:
4
从结果图中可以看到,确实出现了串页的问题,这是因为每页的结尾添加了分页符导致的。

如果单页word文档不是布局太满的话,代码应该能完美合并。

串页问题可以通过调整页面边距改善,单元格:”权属证明编号“ 内容太长可以删除括号中内容,也能解决串页的问题。

总之,通过简单处理后可以得到完美的合并文档

3 第二版代码

第一版思路是复制粘贴,导致串页,我换个思路,把分页文档作为整体,插入合并文档,是否能解决串页问题呢?

代码的主体应该不用变,只需要把 “复制粘贴的动作” 调整为 “插入的动作” 。

(1) 制作格式化块

将分户文档作为一个整体,将其格式化。

   for i, file_path in enumerate(file_list, start=1):# 打开指定的分户Word文档,选中文档中的所有内容,并将其格式化的文本内容,获取格式化文本current_doc = word.Documents.Open(str(file_path))current_doc.Content.Select()selected_text = word.Selection.Range.FormattedText

current_doc 是遍历循环里的中间变量,存储每个分页word的内容。

找到合并文档变量 merged_doc 的末尾,添加一个分页符,准备插入 做好的格式化块。

        # 将光标移动到文档末尾,以便插入新内容merged_doc.Activate()word.Selection.EndKey(Unit=win32.constants.wdStory)# 在文档之间插入分页符(除了第一个文档)if i > 1:word.Selection.InsertBreak(win32.constants.wdPageBreak)

(2) 插入块

        # 将选中的文本内容插入到合并后的文档中,并关闭当前打开的文档,不保存任何更改word.Selection.Range.FormattedText = selected_textcurrent_doc.Close(False)  # 不保存更改,还原循环内的变量初始化

(3) 查看运行效果

其他代码不变,运行一下看效果,结果跟第一版的效果完全一样,串页的位置都一样。

应该是哪里出问题了?思路不同,为啥最后效果一样呢?经过一番搜索学习,找到一个方法:

PasteSpecial 方法 :是 Microsoft Word 的对象模型中用于粘贴剪贴板内容的一个方法。它允许用户以特定的方式粘贴内容,例如保留源格式、仅粘贴文本或粘贴为图片等,参数DataType主要用于指定粘贴内容的格式和行为。以下是对 DataType 参数的简介:

DataType: 指定粘贴时使用的数据类型,常见的值包括:

  1. win32.constants.wdPasteDefault:使用默认格式粘贴内容(保留源格式)。
  2. win32.constants.wdPasteText:仅粘贴纯文本。
  3. win32.constants.wdPasteRTF:以 RTF 格式粘贴。
  4. win32.constants.wdPasteHTML:以 HTML 格式粘贴。
  5. win32.constants.wdPasteMetafilePicture:以元文件图片格式粘贴。
  6. 在代码中,DataType=win32.constants.wdPasteDefault 表示按照源文档的默认格式进行粘贴,确保合并后的文档样式与源文档一致。

(4) 完善代码

既然是 Paste 粘贴,那么前面一定要有 Copy复制,好像又回到第一版代码去了。修改遍历循环里的代码如下:

        # 打开当前 Word 文档,复制内容current_doc = word.Documents.Open(str(file_path))current_doc.Content.Copy()// 修改了查找文档末尾的方法# 将光标移动到合并文档的末尾merged_doc.Activate()word.Selection.EndKey(Unit=win32.constants.wdStory)# 如果不是第一个文件,插入分页符if i > 1:word.Selection.InsertBreak(win32.constants.wdPageBreak)// 关键语句:使用 PasteSpecial 方法粘贴内容,保留源格式word.Selection.PasteSpecial(DataType=win32.constants.wdPasteDefault)# 关闭当前文档,不保存更改current_doc.Close(False)

(5) 第二版完整代码

from pathlib import Path
import win32com.client as win32def merge_word_documents(folder_path, output_file):# 创建 Word 应用程序对象word = win32.gencache.EnsureDispatch('Word.Application')word.Visible = Falsemerged_doc = word.Documents.Add()folder_path = Path(folder_path)# 跳过隐藏文件和临时文件file_list = [f for f in folder_path.iterdir()if f.suffix.lower() in ('.docx', '.doc') and not f.name.startswith('.') and not f.name.startswith('~$')]for i, file_path in enumerate(file_list, start=1):# 打开当前 Word 文档current_doc = word.Documents.Open(str(file_path))# 复制当前文档的全部内容current_doc.Content.Copy()# 将光标移动到合并文档的末尾merged_doc.Activate()word.Selection.EndKey(Unit=win32.constants.wdStory)# 如果不是第一个文件,插入分页符if i > 1:word.Selection.InsertBreak(win32.constants.wdPageBreak)# 使用 PasteSpecial 方法粘贴内容,保留源格式word.Selection.PasteSpecial(DataType=win32.constants.wdPasteDefault)# 关闭当前文档,不保存更改current_doc.Close(False)merged_doc.SaveAs2(output_file)merged_doc.Close(False)word.Quit()if __name__ == "__main__":folderpath = 'E:/test/python3/小程序/分户合并/分户'outputfile = 'E:/test/python3/小程序/分户合并/合并.docx'merge_word_documents(folderpath, outputfile)print('合并完成')

第二版的运行效果,竟然实现了 插入块的效果 ,就跟CAD文件中的 块 效果一样一样的,每个分页word变成了 合并文档中的一个块,想要编辑这个块,双击进入 块编辑器才能编辑,之后再退出。真是峰回路转,意想不到。

仔细看效果图:
7
可以看到,合并后的文档也不串页了,每个页面也变成了块,官方说法是:这是一个插入的对象,而不是一个组合。如果将其转换为office图形对象,会丢失嵌入的数据或链接的信息。

如果想要编辑这个对象,需要双击进入对象,关闭后又是一个不能随意编辑的块了。这倒是一个防止误修改 的好方法。

也有不好的地方,无法进行查找和替换操作了,因为 所有要素都在对象内部,从合并文档直接查找是找不到的。

4 后记

通过以上代码,可以实现 多个word文档的合并,并且两个版本的合并效果不同,各有优缺点,可以根据需要使用。

需要注意一点,可能是windows系统的问题,也可能是 python的问题,运行合并代码以后,系统会多次调用word程序,导致代码运行结束后word程序并没有完全退出干净,连续运行合并代码会报错。

    self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pywintypes.com_error: (-2147418111, '被呼叫方拒绝接收呼叫。', None, None)

解决方法也很简单,退出pycharm程序,关闭所有的word程序,刷新几次桌面,后者多等待几分钟,等系统后台的word程序完全关闭,再运行合并代码就没问题了。

相关文章:

python学习—合并多个word文档

系列文章目录 python学习—合并TXT文本文件 python学习—统计嵌套文件夹内的文件数量并建立索引表格 python学习—查找指定目录下的指定类型文件 python学习—年会不能停&#xff0c;游戏抽签抽奖 python学习—循环语句-控制流 python学习—合并多个Excel工作簿表格文件 pytho…...

Java LinkedList深度解析:双向链表的实现艺术与实战指南

在Java集合框架中,LinkedList以其独特的双向链表结构和灵活的操作特性,成为处理动态数据的重要工具。本文将从底层实现、核心方法、性能优化到企业级应用场景,全方位解析这一经典数据结构的设计哲学与实战技巧。 一、LinkedList的设计定位与核心特性 1. 双向链表的本质 Lin…...

c#内存泄露的原因和解决办法

内存泄漏的原因 不正确的对象引用&#xff1a;最常见的原因是对象不再需要时未被垃圾回收器回收。例如&#xff0c;如果一个对象被一个不再使用的变量引用&#xff0c;它将不会被垃圾回收。事件订阅者未取消&#xff1a;如果订阅了一个事件但没有在对象不再需要时取消订阅&…...

android如何在生产环境中做到详实的日志收集而不影响性能?

在Android应用的生命周期中,日志收集贯穿于开发、测试到生产环境的每一个阶段。特别是在生产环境中,当应用部署到成千上万的用户设备上时,开发者无法直接访问用户的运行环境,也无法像在开发阶段那样通过调试工具实时查看代码执行情况。这时,日志就成为连接开发者与用户设备…...

MySQL安装实战:从零开始搭建你的数据库环境

MySQL作为全球最流行的开源关系型数据库&#xff0c;是开发者、运维人员及数据管理者的核心工具之一。本文将通过多平台安装指南、关键配置解析及常见问题排查三个维度&#xff0c;手把手带你完成MySQL环境搭建。 一、多平台安装指南 1. Linux系统&#xff08;以Ubuntu为例&am…...

[Python] UV工具入门使用指南——小试牛刀

背景 MCP开发使用到了uv&#xff0c;简单记录一下&#xff1a; 为什么MCP更推荐使用uv进行环境管理&#xff1f; MCP 依赖的 Python 环境可能包含多个模块&#xff0c;uv 通过 pyproject.toml 提供更高效的管理方式&#xff0c;并且可以避免 pip 的一些依赖冲突问题。…...

PclSharp ——pcl的c#nuget包

简介&#xff1a; NuGet Gallery | PclSharp 1.8.1.20180820-beta07 下载.NET Framework 4.5.2 Developer Pack&#xff1a; 下载 .NET Framework 4.5.2 Developer Pack Offline Installer 离线安装nupkg&#xff1a; nupkg是visual studio 的NuGet Package的一个包文件 安…...

多任务响应1(Qt)

多任务响应1 1. 架构概述2. 代码示例3. 说明 当系统的一些任务都是同一个对象产生&#xff0c;但需要交由不同对象进行响应。 比如&#xff1a;系统有多个按键&#xff0c;这些按键的共用一个槽函数&#xff0c;但不同的按键对应不同的功能响应。 推荐采用命令模式分散响应的思…...

1. k8s的简介

Kubernetes&#xff08;k8s&#xff09;简介 1. 产生背景 随着云计算和微服务架构的兴起&#xff0c;传统的单体应用逐渐被拆分为多个小型、松耦合的服务&#xff08;微服务&#xff09;。这种架构虽然提升了开发灵活性和可维护性&#xff0c;但也带来了新的挑战&#xff1a;…...

单片机 | 基于51单片机的倾角测量系统设计

以下是一个基于51单片机的倾角测量系统设计详解,包含原理、公式和完整代码: 一、系统原理 核心器件:MPU6050(集成3轴加速度计+陀螺仪) 主控芯片:STC89C52RC(51单片机) 显示模块:LCD1602液晶 工作原理: 通过MPU6050采集XYZ三轴加速度数据,利用重力加速度分量计算俯仰…...

div(HTML标准元素)和view(微信小程序专用组件)的主要区别体

div&#xff08;HTML标准元素&#xff09;和view&#xff08;微信小程序专用组件&#xff09;的主要区别体现在以下方面&#xff1a; 一、应用场景与开发框架 ‌适用平台不同‌ div是HTML/CSS开发中通用的块级元素&#xff0c;用于Web页面布局‌&#xff1b;view是微信小程序专…...

MGR实现mysql高可用性

一。MGR和PXC的区别 1. PXC的消息广播机制是在节点间循环的&#xff0c;需要所有节点都确认消息&#xff0c;因此只要有一个节点故障&#xff0c;则会导致整个PXC都发生故障。而MGR则是多数派投票模式&#xff0c;个别少数派节点故障时&#xff0c;一般不影响整体的可用性。这…...

新型多机器人协作运输系统,轻松应对复杂路面

受到鱼类、鸟类和蚂蚁等微小生物体协作操纵的启发&#xff0c;研究人员开发了多机器人协作运输系统&#xff08;Multirobot Cooperative Transportation Systems&#xff0c;MRCTS&#xff09;运输单个机器人无法处理的重型超大物体&#xff0c;可用于搜救行动、灾难响应、军事…...

汇编获取二进制

文章目录 AT&Tasm Intel AT&T mov_test.s mov $0,%r8dgcc -c mov_test.s 输出 mov_test.o,objdump -D mov_test.o 查看 mov_test.o: mov_test.o: file format elf64-x86-64Disassembly of section .text:0000000000000000 <.text>:0: 41 b8 00 00 00 00 …...

【秣厉科技】LabVIEW工具包——OpenCV 教程(19):拾遗 - imgproc 基础操作(上)

文章目录 前言imgproc 基础操作&#xff08;上&#xff09;1. 颜色空间2. 直方图3. 二值化4. 腐蚀、膨胀、开闭运算5. 梯度与轮廓6. 简易绘图7. 重映射 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#x…...

学习笔记:金融经济学 第3讲

学习笔记&#xff1a;金融经济学 第3讲 注&#xff1a;A本金&#xff0c;n时间&#xff08;比如年&#xff09;&#xff0c;r利率一、 计算习惯1. 单息&#xff08;新产生的利息不算进本金重新计算利息&#xff0c;收款额A(1nr) &#xff09;2. 复利(新产生的利息算进本金重新计…...

NVIDIA RTX™ GPU 低成本启动零售 AI 场景开发

零售行业正在探索应用 AI 升级客户体验&#xff0c;同时优化内部流程。面对多重应用场景以及成本优化压力&#xff0c;团队可采用成本相对可控的方案&#xff0c;来应对多重场景的前期项目预演和落地&#xff0c;避免短期内大规模投入造成的资源浪费。 客户体验 AI 场景的研究…...

【网络】IP层的重要知识

目录 1.IP层的作用 2.主机和节点 3.网络层和数据链路层的关系 4.路由控制 4.1.路由控制的过程 4.2. IP地址与路由控制 4.3.路由控制表的聚合 4.4.静态路由和动态路由 4.5.动态路由的基础 5.数据链路的抽象化 5.1.数据链路不同&#xff0c;MTU则相异 5.2.路径MTU发…...

数理逻辑(Mathematical Logic)综论与跨学科应用

李升伟 整理 数理逻辑&#xff08;Mathematical Logic&#xff09;是现代逻辑学与数学交叉的核心学科&#xff0c;以严格的数学方法研究逻辑推理的形式与规律。其发展深刻影响了数学基础、计算机科学、语言哲学等领域。以下从多个维度综论数理逻辑&#xff1a; 1. 核心分支 命…...

OpenCV 模板匹配方法详解

文章目录 1. 什么是模板匹配&#xff1f;2. 模板匹配的原理2.1数学表达 3. OpenCV 实现模板匹配3.1基本步骤 4. 模板匹配的局限性5. 总结 1. 什么是模板匹配&#xff1f; 模板匹配&#xff08;Template Matching&#xff09;是计算机视觉中的一种基础技术&#xff0c;用于在目…...

一键解锁Landsat 9地表温度计算!ENVI与ArcGIS Pro全流程详解(无需NASA大气校正)

为什么选择Landsat 9的L2SP数据&#xff1f; 之前&#xff1a;《ArcGIS与ENVI——基于landsat与Modis影像的遥感技术的生态环境质量评价》&#xff0c;基于Landsat前期的产品计算温度反演数据需要一系列复杂的步骤。 现在&#xff1a; Landsat 8-9的Collection 2 Level-2&…...

RK3588的linux下实现HDMI输出分辨率及帧率的裁剪

bug反馈&#xff1a;客户现场反馈hdmi接显示屏出现概率性闪黑屏&#xff0c;排除线材&#xff0c;显示屏及GND等外部因素后&#xff0c;提出尝试降低hdmi的输出分辨率和帧率对比测试看看。 Step1&#xff1a;先直接在linux的sdk中找到板卡编译生成后的dts找到hdmi节点 然后找到…...

XR技术赋能艺术展演|我的宇宙推动东方美学体验化

本次广州展览现场引入我的宇宙XR体验模块&#xff0c;通过空间计算与动作捕捉技术&#xff0c;让观众在潮玩艺术氛围中体验虚拟互动&#xff0c;打造“看得懂也玩得动”的展演新场景。 作为科技与文化融合的推动者&#xff0c;我的宇宙正在以“体验科技”为媒介&#xff0c;为潮…...

多线程进阶知识篇(二)

文章目录 一、Synchronized 锁二、ReentrantLock 锁三、两阶段终止阶段一&#xff1a;通知终止阶段二&#xff1a;响应中断 四、线程池为什么要使用线程池&#xff1f;如何创建线程池&#xff1f;ExecutorsThreadPoolExecutor 线程池的基本参数 五、线程池处理任务的流程 一、S…...

Python深度学习基础——深度神经网络(DNN)(PyTorch)

张量 数组与张量 PyTorch 作为当前首屈一指的深度学习库&#xff0c;其将 NumPy 数组的语法尽数吸收&#xff0c;作为自己处理张量的基本语法&#xff0c;且运算速度从使用 CPU 的数组进步到使用 GPU 的张量。 NumPy 和 PyTorch 的基础语法几乎一致&#xff0c;具体表现为&am…...

简单实现单点登录

单点登录 单点登录&#xff08;Single Sign-On, SSO&#xff09; SSO是一种统一身份认证技术&#xff0c;用户只需在认证平台登录一次&#xff0c;即可访问所有关联的应用程序或网站&#xff0c;无需重复输入凭据。例如&#xff0c;企业员工登录内部系统后&#xff0c;可直接…...

c++基础三

1.继承 继承表示,子类可以获取父类的属性和方法,然后可以写子类独有的属性和方法,或者修改父类的方法。类可以继承父类的公共成员(public),但不能继承私有成员(private),私有成员只能在父类内部访问。 1.1 案例一单继承 #include <iostream>using namespace …...

如何将自己的项目推送到GitHub上面去

将项目推送到GitHub的流程总结 以下是将本地项目推送到GitHub仓库的完整流程&#xff1a; 1. 初始化Git仓库&#xff08;如果尚未初始化&#xff09; cd 项目目录 git init2. 配置远程仓库 # 添加远程仓库地址 git remote add origin https://github.com/用户名/仓库名.git…...

Java动态批量生成logback日志文件

应用场景举个例子&#xff1a; 当我一个服务需要启动n个端口&#xff0c;来监听n个来源的数据&#xff0c;并且处理数据逻辑一致&#xff1b;但是我想要它们的日志分开文件夹来打印&#xff0c;从而更好的分析问题&#xff0c;那么就可以用我下面提供的模版了&#xff1b; 动态…...

02、GPIO外设(一):基础知识

基础知识 1、ZET6的引脚分布2、引脚输出3、引脚输入4、最大输出速度 1、ZET6的引脚分布 下面使用C8T6的引脚来类比ZET6的引脚&#xff0c;ZET6中的特殊功能引脚和C8T6的特殊功能引脚是一样。而通用IO引脚比C8T6多而已。下面的C8T6的特殊功能引脚的介绍&#xff1a; STM32F103C8…...