怎么用python将word文档合并
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章主要为大家展示了"怎么用python将word文档合并",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么用python将word文档合并"这篇文章
千家信息网最后更新 2024年09月21日怎么用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安全错误
数据库的锁怎样保障安全
阿里数据库平台
南昌有软件开发专业吗
电脑服务器代理如何永久关闭
笔记本电脑装数据库写代码
提钱游服务器偷懒
三原县公安局网络安全保卫大队
教育技术学科数据库基础
接续oracle数据库
党委会网络安全议题
荣昌区网络软件开发服务代理商
云彩互联网科技
云服务器模拟
培训公司软件开发
软件开发注册个体工商户
县城社区的网络安全目录
浪潮服务器芯片之战
云帆改服务器
软件开发公司推荐国峰软件
web服务器的技术支持
数据库工程师兼职可以干什么
数据库导入索引或主键不能包含
asp.net 云服务器
qt软件开发什么简单
yum安装指向服务器是什么
网络安全网络文明活动总结
打印服务器改成共享服务器
vue 脚手架后台服务器
服务器 管理口
服务器cpu与内存搭配
bcb 清空数据库表