怎么用python将word文档合并
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要为大家展示了"怎么用python将word文档合并",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么用python将word文档合并"这篇文章
千家信息网最后更新 2025年11月12日怎么用python将word文档合并
这篇文章主要为大家展示了"怎么用python将word文档合并",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么用python将word文档合并"这篇文章吧。
设计思路:
首先,整个脚本实现两个功能:
查看各目录下未提交word文档的名单合并各目录下的word文档查看各目录未提交名单:
对于这个需求,首先是读一个写有所有人姓名等信息的Excel文件,有格式要求。然后通过遍历Excel的信息,获取到所有人的姓名。遍历各目录下,是否有对应姓名的文件存在,如果没有,则输出没有提交文件的姓名。
合并word文件:
合并word文件和上一个需求有类似的地方。首先我们都需要读Excel文件,得到姓名信息,然后在各目录下获取到这个人所提交的所有word文件的文件路径,然后通过合并word的操作实现文件合并,合并后最终输出到指定的目录下。
脚本环境说明:
脚本对第三方包有依赖,执行前必须先安装对应的第三方包
pip install python-docx pywin32 xlrd
首先,目录结构必须是如下图所示,所有需要遍历的目录名称都必须是【实训+数字】,因为脚本中涉及多处正则匹配。
其次,Excel文件必须遵循下图所示的格式,首行是标题行,遍历的时候会自动跳过,遍历时会遍历C列和D列,其中C列是人员编号,D列是人员姓名
接着,python脚本必须要根目录下
最后,执行脚本的时候,必须带有传参,传递的参数就是那个Excel表
Microsoft Windows [版本 10.0.19043.1415](c) Microsoft Corporation。保留所有权利。 C:\Windows\system32>python tools.py 花名册.xlsx
完整代码:
#! /usr/bin env python# -*- coding:utf-8 -*- """==================================Power By Python3============ Author Task138 ==================================""" import sysimport xlrd, os, refrom docx import Documentfrom docxcompose.composer import Composerfrom win32com import client as wc # 读Excel表获取学生的学号和姓名def read_excel(excel_file): workbook = xlrd.open_workbook(excel_file) sheet = workbook.sheet_by_index(0) name_list = [] name_dict = [] Sno_list = sheet.col_values(2)[1::] Sname_list = sheet.col_values(3)[1::] for i in range(len(Sno_list)): try: Sno = str(int(Sno_list[i])) except: Sno = Sno_list[i] dict = {} dict['Sno'] = Sno dict['Sname'] = Sname_list[i] name_list.append(Sname_list[i]) name_dict.append(dict) return name_list, name_dict # 合并文档def merge_doc(source_file_path_list,target_file_path): #填充分页符号文档 page_break_doc = Document() page_break_doc.add_page_break() #定义新文档 target_doc = Document(source_file_path_list[0]) target_composer = Composer(target_doc) for i in range(len(source_file_path_list)): #跳过第一个作为模板的文件 if i==0: continue #填充分页符文档 target_composer.append(page_break_doc) #拼接文档内容 f = source_file_path_list[i] target_composer.append(Document(f)) #保存目标文档 target_composer.save(target_file_path) print('[ %s ]保存成功' % target_file_path) if __name__ == '__main__': if len(sys.argv) < 2: print('缺乏必要的参数,请输入学生Excel表作为参数') print('程序终止') exit() excel_file = sys.argv[1] print('请选择需要执行的功能:') print('[ 0 ] 查看各实训目录下未提交的学生名单') print('[ 1 ] 合并实训文件') cmd = input('请选择: ') while cmd not in ['0','1']: print('输入有误,请重新输入,按 Ctrl+C 可退出程序') print('请选择需要执行的功能:') print('[ 0 ] 查看各实训目录下未提交的学生名单') print('[ 1 ] 合并实训文件') cmd = input('请选择: ') try: name_list, name_dict = read_excel(excel_file) except Exception as e: print('Excel读取失败,程序终止,错误如下:') print(e) print() exit() else: if cmd == '0': # 实训目录的数列 file_list = [] for i in os.listdir(): if os.path.isdir(i): if re.match(r'实训\d', i): file_list.append(i) for i in range(1, len(file_list) + 1): dir_name = '实训%s' % i # 进入该实训目录 os.chdir(dir_name) file_list = os.listdir() submit_list = [] for x in file_list: for j in name_list: if j in x and j not in submit_list: submit_list.append(j) result = list(set(submit_list) ^ set(name_list)) if result: print(dir_name, result) os.chdir('../') if cmd == '1': if not os.path.exists('实训汇总'): os.mkdir('实训汇总') print('目录[ 实训汇总 ]创建成功') # 实训目录的数列 file_list = [] for i in os.listdir(): if os.path.isdir(i): if re.match(r'实训\d',i): file_list.append(i) for i in name_dict: doc_list = [] for j in range(1,len(file_list)+1): dir_name = '实训%s' % j # 进入该实训目录 os.chdir(dir_name) tmp = [] for x in os.listdir(): # 判断文件尾缀 fname,fext = os.path.splitext(x) # 如果是.doc,则转换为.docx if fext == '.doc' and not x.startswith('~$'): w = wc.Dispatch('Word.Application') doc = w.Documents.Open(os.path.abspath(x)) doc.SaveAs(os.path.join(os.getcwd(),'%s.docx' % fname), 16) doc.Close() os.remove(x) print('转换文件[ %s ]类型为.docx' % x) elif fext == '.docx': if (i['Sname'] in x) and (len(tmp) == 0): # 只有一个文件 tmp.append(x) elif (i['Sname'] in x) and (len(tmp) != 0): # 有多个文件,按照最新的修改时间进行替换 tmp_file = tmp.pop() old_file_mtime = os.path.getmtime(tmp_file) new_file_mtime = os.path.getmtime(x) if new_file_mtime > old_file_mtime: # 新文件比较新,以新的为准 tmp.append(x) else: # 老文件比较新,以老文件为准 tmp.append(tmp_file) else: # 其它文件类型,直接跳过 # print('当前文件[ %s ]类型不是.doc或者.docx,跳过此文件的合并' % os.path.abspath(x)) continue if tmp: # 如果这次实训有这位同学的文件 doc_list.append(os.path.join(dir_name,tmp.pop())) # 返回父目录 os.chdir('../') if doc_list: # 有内容,进行文档合并 try: merge_file_name = i['Sno'] + '-' + i['Sname'] + '-' + '实训汇总' + '.docx' merge_doc(doc_list, './实训汇总/' + merge_file_name) except Exception as e: print() print('[ %s ]学生信息有误,程序中断' % i['Sname']) print(e) print()功能执行效果图:

以上是"怎么用python将word文档合并"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
文件
文档
目录
姓名
脚本
内容
信息
篇文章
人员
功能
名单
学生
时候
格式
第三方
类型
需求
学习
帮助
输出
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技聚焦
江苏网络技术服务公司
杭州壹牛网络技术有限公司
专利数据库检索情况
服务器和安全网关连接
盘锦网络安全等保测评
阿里云服务器搭建大陆能封吗
指控软件开发合同
蚌埠租房软件开发
网络安全的等级分为哪四种
软件开发及软件评估
三旺通信8口串口服务器
网络安全班会主题发言稿
数据库id关联不好迁移
网络安全的大案
数据库审计的必要性
电子板报网络安全
国家实施网络安全分级制度
vivo识曲服务器异常
linux服务器端口指定命令
云服务器 mac
科技互联网设计方案
服务器面板是干嘛的
网络安全在多网合一的脆弱
ios软件开发难吗
四川玖华网络技术有限公司
烟囱式软件开发到平台式
简述网络安全的要素
数据库用户名与密码是什么
数据库怎么看包体明细