盘点一个Python自动化办公的实战案例

news/2024/5/21 9:44:33/文章来源:https://blog.csdn.net/pdcfighting/article/details/127148177

点击上方“Python共享之家”,进行关注

回复“资源”即可获赠Python学习资料

岭猿同旦暮,江柳共风烟。

大家好,我是皮皮。    

一、前言

前几天在Python钻石交流群【Hxy任我肥】问了一个Python自动化办公的问题,提问截图如下:

7ac507708bea9301b6ed79650317bb99.png

想要的效果是下图这样的:

2569d3071c3611babddf5e35a00c0aa6.png

准确来说,这个都不算是问题了,而是一个实实在在的需求。

二、实现过程

这里【Jason】给了一个可行的思路,如下:

89a7e0001e9462831336a3c7d2704704.png

后来【瑜亮老师】给了一个具体的代码,如下所示:

import re
from docx import Document
import pandas as pddocument = Document("判断(括号处理)(1).docx")
all_paragraphs = document.paragraphs
data = [paragraph.text for paragraph in all_paragraphs if '√' in paragraph.text or '×' in paragraph.text]
data = ''.join(data)
res = re.findall('[√×]', data, re.S)
res = [f'{k + 1}.{v}' for k, v in enumerate(res)]
df = pd.DataFrame(res)
df.to_excel('test9-13.xlsx', index=False, header=None)

真的太强了!

9a58bf7c5f21d8a5de4bac83b69a76b7.png

代码运行之后可以得到预期的结果,如下图所示:

c3559135d2f2b9e0463dce5a9e5c2ebb.png

后来【狂吃山楂片】基于此代码,来了个简易版的,代码如下所示:

import re
from docx import Document
import pandas as pddocument = Document(r"判断(括号处理)(1).docx")
text = document.part.blob.decode('utf-8')text = re.sub(r'<.*?>', '', text)
text = re.sub(r'\.\s+', r'.', text)
df = pd.DataFrame(re.findall(r'\d+\.[√×]', text))
df.to_excel('result.xlsx', header=None, index=False)

这技术真是到家了,出神入化的。

cf6ca3b8704dbc0714b9cb05906321db.png

代码运行之后,也完全可以实现这个需求。

125390571f1602c2959eb92987b16380.png

后来【瑜亮老师】还给了一个代码,也非常赞,如下所示:

data = [paragraph.text for paragraph in all_paragraphs if '√' in paragraph.text or '×' in paragraph.text]
# 合并为一个长字符串,然后替换删除所有的空格
data = ''.join(data).replace(' ', '')
# 使用re正则表达式提取出所有含有题号的答案
res = re.findall(r'\d+\.[√×]', data, re.S)
df = pd.DataFrame(res)
df.to_excel('test9-13.xlsx', index=False, header=None)

真让人叹为观止!把多余的空格都替换删除,可以防止答案中含有空格而导致不能被正则r'\d+\.[√×]'匹配到,这样就一步到位了。不用再用列表推导式构造答案。

3922f307df3cb6fb6bb0cda5153c5f8a.png

你以为这就完事了?

后来【甯同学】使用openpyxl库也搞定了,代码如下图所示:

import re 
import docx
import openpyxl
def str_work(string:str):return [*filter(None,re.split('\.',re.sub('\d+','',string.replace(' ', '').replace('\n', ''))))]
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['题目','答案'])
doc = docx.Document(r'C:\Users\Administrator\Desktop\判断(括号处理).docx')
doc_text = '\n'.join(( i.text for i in doc.paragraphs[3:]))
doc_list = doc_text.split('\n一、判断题')
title_row = [i.strip() for i in doc_list[0].split('\n') if i.strip().split('、')!=['']]
answer_row = [i for i in str_work(doc_list[1])]
for i in zip(title_row,answer_row):ws.append(list(i))
wb.save('1.xlsx')

运行之后得到的结果如下图所示:

b50c1639d718fcfd89aef05923b8788a.png

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python自动化办公的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【Hxy任我肥】提问,感谢【Jason】、【瑜亮老师】、【狂吃山楂片】、【甯同学】给出的思路和代码解析,感谢【dcpeng】、【产后修复】、【此类生物】、【余克富】等人参与学习交流。

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting),应粉丝要求,我创建了一些高质量的Python付费学习交流群,欢迎大家加入我的Python学习交流群!

9c60eb90c7112df3881c3212da36d9e0.png

有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

5e712768ab89a06f8d6f0a239b5ec631.png

------------------- End -------------------

往期精彩文章推荐:

  • 盘点Python网络爬虫入门常见的一个问题

  • 盘点一个使用Python合并excel表格过程中遇到的一个小问题

  • 分享一个playwright网络爬虫实战教程

  • 手把手教你使用在线工具自动生成Python爬虫代码

2fb446da37915294564f9ae366e72093.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【

万水千山总是情,点个【在看】行不行

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

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

相关文章

基于Vue+SSM+SpringCloudAlibaba的英雄管理系统

需求 前端技术&#xff1a;element-ui、vue后端技术&#xff1a;spring boot、spring cloud、mybatis plus、jwt项目要求&#xff1a; 前端&#xff1a;exam-war-fore-1217后端&#xff1a;exam-war-parent-1217端口要求&#xff1a; 注册中心&#xff1a;10086、10087 &#x…

福特、微软、槟榔-《软件方法》自测题解析019

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 《软件方法》第2章自测题2 1 [单选题] 1999年11月的《财富》杂志题为“20世纪企业家”的文章&#xff0c;评选出了最能代表20世纪企业家精神的企业家─福特汽车的Henry F…

云原生|kubernetes|ingress-nginx插件部署以及简单的应用

前言&#xff1a; ingress直译&#xff1a;进口&#xff1b;入口&#xff1b;初切&#xff1b;进入&#xff1b;进入资格&#xff1b;进入权。在kubernetes中&#xff0c;它指的是网络入口。 ingress概述&#xff1a; 通俗来讲&#xff0c;Ingress和之前提到的Service、Depl…

Redis面试汇总笔记

在两个月前的学习中&#xff0c;我看过一个redis相关的讲解视频&#xff0c;是一个叫诸葛的老师&#xff0c;其中分为几层进行讲述&#xff0c;分别是数据类型、分布式锁、redis常见问题等。当时有记录一些内容&#xff0c;下面将按照顺序进行分享。 &#xff08;一&#xff0…

Cherno的Cpp教程笔记002:C++是如何工作的

include需要找到一个叫iostream的文件&#xff0c;然后将内容拷贝到当前的文件中来 main函数是程序的入口&#xff0c;main中调用了std::cout , main函数不一定需要返回值&#xff0c;当没有返回值时默认返回0 #include是预处理语句&#xff0c;编译器优先处理这些语句&#…

橘子学Mybatis03之代理模式

一、什么是代理模式&#xff0c;为啥需要代理模式 1、问题 在JAVAEE的MVC分层开发中&#xff0c;哪个层级对我们来说最重要&#xff1f; DAO ------> Service --------> ControllerJAVAEE分层开发中&#xff0c;最为重要的是Service层。这个也可以理解&#xff0c;因为S…

Lesson 8 The best and the worst 最好的和最差的

1.原文 2. 参考译文 3. New words and expressions ★competition n. 比赛&#xff0c;竞赛(暗地里的竞争) race n. 比赛&#xff0c;竞赛 car racematch n. 比赛 football matchcontest n. 比赛(更广泛)baby contest 宝宝大赛&#xff1b;beauty contest 选美game : 游戏, 运…

Spring自学日志01-IOC(控制翻转)

目录一、IOC的基本概念和底层原理1.1、什么是IOC?1.1.1、Spring IOC容器1.2、IOC底层原理1.2.1、IOC容器1.2.2、IOC容器装配Bean的方式1.2.3、IOC容器装配Bean的操作1.2.3.1、基于XML1.2.3.2、基于注解1.2.4、IOC容器装配Bean的作用域 一、IOC的基本概念和底层原理 1.1、什么是…

MySQL:索引特性

索引 0. 预备知识 索引是一个“物美价廉”的特性&#xff0c;用来提高数据库的性能。不需要改程序、调SQL、只需要正确的创建索引&#xff0c;查询速度就能提高成百上千倍&#xff0c;但查询速度的提升也带来了插入、更新、删除速度的下降。 0.1 认识磁盘 MySQL对数据进行增…

大数据讲课笔记2.1 初探大数据

文章目录零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;什么是大数据&#xff08;二&#xff09;大数据的特征1、数据体量大2、数据类型多3、处理速度快4、价值密度低&#xff08;三&#xff09;研究大数据的意义&#xff08;四&#xff09;拥抱大数据时代1、…

【数据结构初阶】第四话 —— 动态栈的基本操作

文章目录什么是栈栈的结构1. 初始化栈2. 入栈3. 出栈4. 获取栈顶元素5. 获取栈中有效元素个数6. 检测栈是否为空7. 销毁栈8. 总结接口函数贴图什么是栈 假如有⼀个⼜细⼜⻓的圆筒&#xff0c;圆筒⼀端封闭&#xff0c;另⼀端开⼝。往圆筒⾥放⼊乒乓球&#xff0c;先放⼊的靠近…

U盘插入自动读写/U盘插入自动复制/pythhttps://www.cnblogs.com/wawawa888/p/16749476.htmlon检测U盘的插入,以及进行自动复制文件并写入文件

U盘自动读写的小玩意 共有四种方法(我知道的方法,全是转载。转载也很不易,可望给个硬币) 方法一(vbs方法 全自动,转载自bilibili 点我跳转)文件下载链接(点我下载) 方法二(cmd方法 需手动,转载自bilibili 点我跳转)文件下载链接(点我下载) 方法三(python方法 全…

在DataFrame中根据索引值进行排序:sort_index()函数

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 在DataFrame中根据索引值进行排序&#xff1a; sort_index()函数 [太阳]选择题 对以下python代码表述有误的选项是&#xff1f; import numpy as np import pandas as pd data np.random.…

ElasticSearch_03_批量处理命令mget和bulk的使用

系列文章目录 文章目录系列文章目录前言一、批量处理命令mget方案1&#xff1a;body请求体中指定index和type方案2&#xff1a;url中指定index和type&#xff0c;body中仅指定ids方案2扩展&#xff1a;url中指定index和type&#xff0c;body中仅指定id数组二、基于bulk的增删改…

C++开发坦克大战--补充(加入传送门)--附完整代码

目录 素材整理 穿越草地 坦克穿越草地 子弹穿越草地 传送门 判定形式 生成传送门 传送坦克 关卡模式 效果展示 ​总结 完整代码 上一篇坦克大战居然意外获得了一些关注&#xff0c;正好最近也完善了一些功能&#xff0c;同时也加入了一些自己想到的新元素&#xff0c;主要是…

python requests cookie的获取和使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、cookie是什么&#xff1f;二、使用步骤开始代码实现会话是什么然后写入我们的账号信息使用session访问登陆账号的url获取账号的书架上的数据完整的代码补充比…

基于javaweb在线投票管理系统ssm

基于SSM的在线投票系统以XXX学院为背景&#xff0c;运用在校所学习的软件开发原理&#xff0c;采用SpringSpringMVCMyBatis技术和MySQL数据库构建一个基于B/S模式的在线投票系统。 传统的投票模式都是通过人工手动填写问卷的方式来进行&#xff0c;这在很大程度上会造成人力和…

1.1 Ryu 的安装部署

What is Ryu Ryu是轻量级的、开源的SDN控制器Ryu是由日本NTT公司在2012年推出其名字在日文中的意思是“Flow”和“Dragon”的意思 Ryu架构 Ryu安装 在Ubuntu上装Ryu和Mininet&#xff0c;CSDN上搜教程&#xff0c;这一部分正确做法是对着视频敲代码如果有问题去CSDN上找解决办…

滤波器基础01——滤波器的种类与特性

滤波器是一种选频装置&#xff0c;它能够保留某一频段的信号&#xff0c;将此频段之外的信号消除。以下介绍不同分类依据下滤波器的特点。 一. 模拟滤波器与数字滤波器 根据滤波器的作用对象是模拟信号还是数字信号可将滤波器分为模拟滤波器和数字滤波器。 模拟滤波器处理模…

创建并运行一个 Spring Boot 项目

创建并运行一个 Spring Boot 项目引言第一个 Spring Boot 项目1. 创建一个 spring boot 项目第一步第二步第三步第四步2. 验证第一步第二步3. 写一个 hello world第一步解析代码第二步注意事项网页创建一个 Spring Boot 项目Spring Boot 的优点引言 Spring Boot 是 Spring 框架…