使用Python实现对word的批量操作

Python在平时写写小工具真是方便快捷,Pyhon大法好。以下所有代码都是找了好多网上的大佬分享的代码按照自己的需求改的。

调用的库为Python-docx、win32com、PyPDF2、xlwings(操作excel)。

因为公司的任务要对上千个word文件进行批量操作,手工操作太累了,于是加班加点赶出来了一个自动化脚本,虽然还有很多要优化的地方,但已经可以稳定运行了,下面记录一下脚本功能。

1 doc转docx

因为Python-docx库只能对docx文件操作,所以要转格式,直接改后缀不行。

word = wc.Dispatch("Word.Application")
# 不能用相对路径,老老实实用绝对路径
# 需要处理的文件所在文件夹目录
for root, dirs, files in os.walk(rawpath):for i in files:# 找出文件中以.doc结尾并且不以~$开头的文件(~$是为了排除临时文件的)if i.endswith('.doc') and not i.startswith('~$'):print(i)doc = word.Documents.Open(root +'\\'+ i)# # 将文件名与后缀分割rename = os.path.splitext(i)# 将文件另存为.docxdoc.SaveAs(root + '\\' +rename[0] + '.docx', 12)  # 12表示docx格式doc.Close()# time.sleep(1)
word.Quit()

2 找到特定文件

这个比较简单,只需要循环遍历文件夹,按照队列里的关键字将目标文件添加的队列里即可。

因为转pdf只能是docx,所以要找docx文件,同时过滤~$文件开头的临时文件。

def findfiles():count = 1for root, dirs, files in os.walk(path):for filename in files:for i in range(len(filenames)):if (filenames[i] in filename and filename.endswith('docx') and not filename.startswith('~$') :result.append([count, root + "\\" + filename])count += 1breakprint(result)

3 所有字体颜色变为黑色

def change_color(path):file = Document(path)for pag in file.paragraphs:for block in pag.runs:block.font.color.rgb = RGBColor(0, 0, 0)for table in file.tables:for row in table.rows:for cell in row.cells:for cell_pag in cell.paragraphs:for cell_block in cell_pag.runs:cell_block.font.color.rgb = RGBColor(0, 0, 0)# 页眉pag_head = file.sections[0].headerhead_pag = pag_head.paragraphs[0]for run in head_pag.runs:run.font.color.rgb = RGBColor(0, 0, 0)#  页脚pag_foot = file.sections[0].footerfoot_pag = pag_foot.paragraphs[0]for run in foot_pag.runs:run.font.color.rgb = RGBColor(0, 0, 0)file.save(path)print(path)print("^"*10 + "颜色切换完成" + "^"*10)

4 docx转pdf

因为分页操作只能pdf实现。

for i in range(len(result)):file = result[i][1]name = file.rsplit('\\', 1)[1]print(i)if "关键字" in name:  # 跳过不需要截取的关键字文件outfile = pdf_file_path + name[:-5] + str(i) +'.pdf'else:outfile = out_path + name[:-5] + str(i) +'.pdf'  if file.split(".")[-1] == 'docx':print(file)convert(file, outfile)print("^"*10+"PDF转换完成"+"^"*10)time.sleep(1) 

5 截取特定页面

def split_single_pdf(read_file, start_page, end_page, pdf_file):# 1. 获取原始pdf文件fp_read_file = open(read_file, 'rb')# 2. 将要分割的PDF内容格式化pdf_input = PdfFileReader(fp_read_file)# 3. 实例一个 PDF文件编写器pdf_output = PdfFileWriter()# 4. 把第一页放到PDF文件编写器for i in range(start_page, end_page):pdf_output.addPage(pdf_input.getPage(i))# 5. PDF文件输出with open(pdf_file, 'wb') as pdf_out:pdf_output.write(pdf_out)print(f'{read_file}分割{start_page}页-{end_page}页完成,保存为{pdf_file}!')

6 调用打印机打印

def printer_loading(filename):win32api.ShellExecute(0, "print", filename, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0)

7 对execl特定页面打印

def excel_print(execl_path):app = xw.App(visible=False, add_book=False)workbook = app.books.open(execl_path)worksheet = workbook.sheets['sheet关键字']area = worksheet.range('A1:D11')  # 打印区域area.api.PrintOut(Copies=1, ActivePrinter='Canon MF260 Series UFRII LT', Collate=True)workbook.close()app.quit() 

              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具

八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

威联通硬盘休眠后修改系统定时任务

按照网上一些教程,成功将威联通的机械硬盘设置了自动休眠。但是发现每天有多个整点硬盘会自动唤醒,怀疑是系统内置的定时任务触发了硬盘唤醒。 通过查看系统日志中事件和访问记录,判断出一些引发硬盘唤醒的自动任务,将这些定时任…

常见注册中心对比

特性 / 注册中心ConsulEtcdZooKeeperNacos服务发现DNS、HTTPWatcherWatcherHTTP/UDP/SDK健康检查多种方式(HTTP、TCP 等)监听健康状态变化心跳机制和 Watcher支持自定义健康检查一致性Raft 算法Raft 算法ZAB 协议Raft 算法性能适用于大规模部署读密集型操…

mediapipe 的姿态检测遇到的问题

简介: 最近在用mediapipe 进行人体姿态检测,当我初始化pose(姿态检测对象)时出现了错误:报错如下: Downloading model to D:\Anaconda\envs\taiji\lib\site-packages\mediapipe/modules/pose_landmark/pos…

Hdfs java API

1.在主机上启动hadoop sbin/start-all.sh 这里有一个小窍门,可以在本机上打开8088端口查看三台机器的连接状态,以及可以打开50070端口,查看hdfs文件状况。以我的主虚拟机为例,ip地址为192.168.198.200,所以可以采用下…

hadoop集群基础环境搭建

1.安装基础环境(以centos7为例) 1.1修改IP 创建4台虚拟机IP设置为192.168.154.4,192.168.154.5,192.168.154.6,192.168.154.7启动每台节点,在对应的节点路径"/etc/sysconfig/network-scripts…

DS八大排序之冒泡排序和快速排序

前言 前两期我们已经对"插入排序"(直接插入排序和希尔排序) 和 "选择排序"(直接选择排序和堆排序)进行了详细的介绍~!这一期我们再来详细介绍一组排序 :"交换排序"即耳熟能…

TCPIP介绍

可见 TCP/IP 被分为 4 层,每层承担的任务不一样,各层的协议的工作方式也不一样,每层封装上层数据的方式也不一样: 应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议; 传输…

Node-RED 规则引擎:开启物联网时代的智能决策

Node-RED 规则引擎:开启物联网时代的智能决策 随着物联网技术的快速发展,大量的设备和传感器正在不断产生海量的数据。为了有效处理这些数据,并实现智能决策,规则引擎在物联网领域扮演着至关重要的角色。而 Node-RED 规则引擎则以…

如何集成和使用Feign的远程调用

feign的简单介绍 Feign是一个声明式的http客户端,可以帮助我们优雅的实现http请求的发送 OpenFeign/feign: Feign makes writing java http clients easier (github.com)Spring Cloud OpenFeign 中文文档 (springdoc.cn)Spring Cloud OpenFeign在spring cloud的基础…

Tutorials about this CSDN Account

Tutorials about this CSDN Account 0. Introduction ​ The original intent of these blogs is to record the knowledge and matters that I’ve encountered during college life so that I could learn from the OLD me when needed. Additionally, I’d like to emphas…

Reinfocement Learning 学习笔记PartⅡ

文章目录 Reinfocement Learning六、随机近似与随机梯度下降(Stochastic Approximation & Stochastic Gradient Descent)6.1 Robbins-Monro Algorithm6.2 随机梯度下降 七、时序差分方法(Temporal-Difference Learning)7.1 TD…

用enum代替int常量

使用enum类型是一种更优雅、类型安全的方式来代替int常量。枚举类型提供了更多的语法支持和类型检查,使得代码更易读、易维护。以下是一个简单的例子,演示如何用enum代替int常量: // 使用enum定义枚举类型 enum Direction {NORTH,SOUTH,EAST…

TSINGSEE青犀可视化视频云平台JT/T1078接入能力在智慧物流中的应用

一、引言 随着科技的快速发展和全球贸易的蓬勃发展,智慧物流成为了现代物流业的重要发展方向。智慧物流通过引入先进的信息技术,实现了物流过程的自动化、智能化和信息化,从而提高了物流效率和准确性。在这个过程中,JT/T1078接入…

魔众文库系统v5.7.0版本文件顺序选择,短信注册支持设置密码,前端界面升级

文件顺序选择,短信注册支持设置密码,前端界面升级 [新功能] 富文本支持文档一键导入,支持Word文档(docx)、Markdown文档(md) [新功能] 财务中心→全部订单新增"业务订单ID"筛选条件…

【Vue】elementUI表格,导出Excel

系列文章 【Vue】vue增加导航标签 本文链接:https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接:https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue,在Windows IIS平台…

操作系统系列:快速了解C语言的编译

操作系统系列:快速了解C语言的编译 关于C语言的编译编译时会发生什么?C预处理器实际的编译汇编链接 传递参数到程序中匈牙利命名法系统调用Unix系统调用 关于C语言的编译 开发者写好一段代码后,需要将编码语言转换为设备认识的机器语言才能执…

Jmeter分布式性能测试,80%资深测试都会遇到这个坑!

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

深度学习项目部署:解析 NVIDIA Docker 中的 CUDA 镜像版本:base 版本、 runtime 版本、devel 版本

近期,我不得不将深度学习项目部署到 Docker 环境中,而在这个过程中避免不了涉足 NVIDIA Docker 的坑。尽管确认其为非常实用的工具,但容器里却一片干净,什么都没有,需要一些时间去进行配置。在这篇博客中,我…

【C语言】动态内存管理(C语言的难点与精华,数据结构的前置知识,你真的掌握了吗?)

文章目录 引言一、为什么要动态内存分配二、动态内存分配的相关函数2.1 malloc2.2 free2.3 calloc2.4 realloc 三、常见的动态内存的错误3.1 对NULL指针的解引用3.2 对动态内存越界访问3.3 对非动态内存释放3.4 对动态内存部分释放3.5 对动态内存多次释放3.6 未对动态内存释放&…

v-md-editor高级使用之自定义目录

​ 官方给出的目录设置参见:https://code-farmer-i.github.io/vue-markdown-editor/zh/senior/toc.html#%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE ​ 在做实际使用中往往可能需要将目录结构独立出来,经过近一天的研究终于明白其实现逻辑,并将目…