gududehuo 发表于 2023-10-9 01:07:12

你们都用 Python 实现了哪些办公自动化?

Python这么火,Python办公自动化是吸引职场人学习的动力,你们都用Python实现了哪些办公自动化?都用到了那些库?效果怎么样?你们认为什么样的工作适合用Python来实现办公自动化?

lndxs 发表于 2023-10-9 01:07:52

一、 简介


    基于tkinter提供GUI界面,通过netmiko模块以SSH方式与网络设备进行交互,从而达到控制网络设备的效果。是一款相对界面简洁、操作简单、业务实例与产品功能解耦的桌面小助手,涵盖了数据捕获、配置备份、配置下发、设备巡检、模板测试、监控工具、资产管理及可视化等功能模块,并提供周期任务,定时任务,邮件通知等辅助功能。
    另外值得一提的是管理网络设备的方式多种多样,除了传统的CLI,SSH,SNMP等方式外,近些年随着SDN的兴起,通过NETCONF,RESTCONF,Telemetry等方式与网络设备交互的场景也日益增多。控制器通过协同南北向接口控制全局网络,从而达到业务快速部署及回收、流量路径动态调整等更加敏捷高级的功能,基于NETCONF,RESTCONF,Telemetry与网络设备交互的方式也是大势所趋。
@弈心 @朱嘉盛二位老师,和网络自动化结缘来源于两年前阅读了王印老师的畅销书《网络工程师的python之路》,而后打开了新世界的大门,落地并解决了很多现网问题,感恩,致敬。
二、模板工具

2.1Jinja2

从配置视图看,这是一个从“无”到“有”的过程,通过自定义yaml文本将实际业务数据结构化建模,结合自定义的jinja2文本,即可快速准确渲染出预期配置。

http://pica.zhimg.com/v2-213ad3d44a665cd8d011acb7ccdef521_r.jpg?source=1940ef5c
2.2testFSM

通过定义testFSM文本对计算机可读性差的原始配置或回显进行数据捕获,输出格式化数据。

http://picx.zhimg.com/v2-834687c7d8f2223ca87c3f5b1be473d2_r.jpg?source=1940ef5c
2.3regex

通过正则表达式进行文本匹配,相信大多数网工对正则都十分熟悉,在日常工作中,不论从日常交互式的回显过滤(include),还是BGP中as_path filter、community filter等策略工具,均少不了正则表达式的身影。

http://picx.zhimg.com/v2-76da0c96ad95ce76a853301667025a3e_r.jpg?source=1940ef5c
三、配置备份

通过ssh自动登陆网络设备实现配置备份自动存档,支持周期执行、定时执行等任务控制,如不勾选默认为单次立即执行。

http://pica.zhimg.com/v2-a4a406b3149560c2c294ce0d7ca31ace_r.jpg?source=1940ef5c

http://pica.zhimg.com/v2-0c23b20b99661b139cc7a6bbcf532925_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-3e3528cc1fe507a321c9e67de89fbb41_r.jpg?source=1940ef5c
四、设备巡检

4.1功能简介

    当前该功能支持四种模板用于设备巡检及数据捕获,可满足日常90%以上的业务场景。需要注意的是以下四类模板中的<设备类型>字段均和设备信息中的<设备类型>对应,用于给思科设备的检查项对于华为设备毫无意义,将自动跳过。
模板一:testFSM数据捕获

http://pica.zhimg.com/v2-e1bf287033fe77f2976bad21efb30d21_r.jpg?source=1940ef5c
模板二:正则抓取两个字符串进行是否相同比较

http://picx.zhimg.com/v2-b238fe03c42509dc72195b895e3ec602_r.jpg?source=1940ef5c
模板三:正则抓取数字与设定值进行大小比较

http://pic1.zhimg.com/v2-6c01c725c0558f9265d8a16149bbef8e_r.jpg?source=1940ef5c
模板四:根据设置好的规则,校验正则匹配与否

http://picx.zhimg.com/v2-702c0b86d04fa369986be05be36dbd51_r.jpg?source=1940ef5c
4.2testFSM数据抓取

场景举例:如想收集arp表,路由条目等回显信息,可通过testFSM模板抓取相关信息并格式化存档。

http://picx.zhimg.com/v2-e1bf287033fe77f2976bad21efb30d21_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-5c70f6f27a57bb01915d36259fb8d416_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-b31e788fa6921555f5f918319e5db63a_r.jpg?source=1940ef5c
报告展示:

http://pic1.zhimg.com/v2-78f42a5686ce14327d44bef246d958bd_r.jpg?source=1940ef5c
4.3字符串比较

场景举例:如想检查交换机的BGP router-id是否为loopback0接口地址则可使用该模板。

http://picx.zhimg.com/v2-583d0d2daf0806d3a8881f3dfed7f16f_r.jpg?source=1940ef5c

http://pica.zhimg.com/v2-1e6341d5274a8e36f0ad833c34922aba_r.jpg?source=1940ef5c
报告展示:

http://picx.zhimg.com/v2-0a2370fa559fdae4b740eaec5176e7a0_r.jpg?source=1940ef5c
4.4抓取的数字与设定值比较大小

场景举例: 如想检查指定接口的流量是否超过80%(自行设定);如想检查设备内存使用率是否高于60%,如想检查设备出风口温度是否高于40℃等,均可使用此通用模板。

http://picx.zhimg.com/v2-faaf19be2e4d7b4b67e823606134a7a5_r.jpg?source=1940ef5c
报告展示:

http://picx.zhimg.com/v2-8890bcbada2b1d4d5de8e04e9b0600a8_r.jpg?source=1940ef5c
4.5常规匹配与否校验

场景举例:
1,检查华为交换机BGP邻居状态,禁止为非Established,否则不合规,反之合规。

http://pic1.zhimg.com/v2-66d50cfdfa389d1b5a2fe050157b433c_r.jpg?source=1940ef5c
2,检查华为交换机的硬件告警,必须为Info: No alarm.,否则不合规。

http://picx.zhimg.com/v2-8e624db94126a4b1eea9e59c3d64bd6b_r.jpg?source=1940ef5c
3,想快速找出网络中哪些思科交换机的软件版本为Version 15.2(4)M11,设置检查类型为必须,则合规的设备为版本为Version 15.2(4)M11。

http://pic1.zhimg.com/v2-8be6d4f3630d5ad69e1dc76b83097274_r.jpg?source=1940ef5c
报告展示:

http://pic1.zhimg.com/v2-e3911389c36350a9a14dd949137f0aac_r.jpg?source=1940ef5c

http://pica.zhimg.com/v2-e19b3318f3acae8e7e4d7042858da34f_r.jpg?source=1940ef5c
4.6 邮件通知

勾选邮件通知按钮后,任务执行完毕后将自动发送邮件通知,并将检查报告作为附件,效果如下。

http://picx.zhimg.com/v2-a5b7f559f2b5e5923eaa74d7ca4aecb9_r.jpg?source=1940ef5c
五、配置下发

通过读取自定义的配置脚本对设备下发配置,支持批量多线程下发。配置脚本文件格式为ip.txt,如选择的目录下无该文件将自动跳过本设备。支持定时任务,满足特殊时间段如经常需半夜进行常规化低风险配置变更,但又不想开电脑的场景,勾选邮件通知将在执行完毕后发送邮件并添加操作日志为附件。

http://picx.zhimg.com/v2-ec732ce51a584eca36a670e038a6dbd8_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-ecbc3017914eddb6d73ee1c02332e3de_r.jpg?source=1940ef5c
六、监控工具

6.1ping监控

不间断连通性监控。

http://pic1.zhimg.com/v2-eca2beccd4f2d670a1bd314d3ff694c2_r.jpg?source=1940ef5c
6.2端口监控

不间断端口开放状态监控。

http://picx.zhimg.com/v2-e44e1c3b94c88d11cf756a4353c8613f_r.jpg?source=1940ef5c
6.3 网段探测

自定义网段连通性情况探测。

http://pica.zhimg.com/v2-0db7cce7a6909766019e342033a182e3_r.jpg?source=1940ef5c
七、资产管理

7.1设备管理

通过导入表格文件实现资产信息GUI展示,支持搜索功能。后续将考虑通过PyQt5+MySQL方式为设备建库,并实现更加丰富及完善的管理功能及界面。

http://picx.zhimg.com/v2-4c488f806079e0c9ead2e112d011509e_r.jpg?source=1940ef5c
7.2设备概览

将资产按照型号、厂商、物理站点、逻辑分区维度进行图表可视化。

http://picx.zhimg.com/v2-3edc68a721ddfdca506416cb6687178c_r.jpg?source=1940ef5c
八、邮箱设置

设置自动发送邮件的相关参数。多个主送人或者抄送人之间使用分号分割。

http://pic1.zhimg.com/v2-71b351dfe9e8206a42393bcaff0f0974_r.jpg?source=1940ef5c

rlb1566 发表于 2023-10-9 01:08:41

今天来分享一个只需要20行Python代码,就能一键自动整理电脑桌面、文件夹!超实用、超方便!
事情是这样的
话不多说,电脑桌面用久了,是不是看着很崩溃
放在桌面上的原因,主要是为了下次使用的时候好找
所以,今天就用Python搞一个脚本
用来整理桌面或者文件夹
一键整理
先上效果

http://pica.zhimg.com/v2-091f6bdcedc736735f568742ffe758ea_r.jpg?source=1940ef5c
1、自定义格式

首先,我们需要根据自己对需要整理的文件格式、文档
扩展名在代码中进行自定义分类
FILE_FORMAT={"图片":[".jpg",".jpeg",".bpm",'.png','.gif'],"文档":[".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".md"],"视频":[".mp4","avi","wmv",],"音频":[".mp3"],"压缩":[".rar",".zip",".tar",".gz",".7z","bz"],"脚本":[".ps1",".sh",".bat",".py"],"可执行文件":['.exe','.msi'],"网页文件":['.html','.xml','.mhtml','.html'],"快捷方式":[".lnk"],
}2、遍历要整理的文件夹

#定义要整理的文件夹orgPath='D:\\direct'print(os.scandir(orgPath))#循环整理的文件夹。for myfile in os.scandir(orgPath):    #跳过file
    if myfile.is_dir():      print('%s是文件夹'%myfile)      continue
    #输出文件
    print(myfile.name)3、启动整理

根据我们自己定义的扩展名格式,创建文件夹。
例如:定义的图片资料类型。
"图片":[".jpg",".jpeg",".bpm",'.gif']
如果检测到用包含的.jpg ,.gif等不同 格式的文件类型,我们的脚本就创建一个 资料文件夹。
然后将文件夹中的 .jpg格式的文件,移动到 图片资料文件夹中。
#找到要整理的文件路径
    file_path=Path(orgPath+'\\'+myfile.name)
    lower_file_path=file_path.suffix.lower()    #循环遍历我们定义的格式类型
    for geshi in FILE_FORMATS:      if lower_file_path in FILE_FORMATS:
            directory_path=Path(orgPath+'\\'+formt)
            directory_path.mkdir(exist_ok=True)
            file_path.rename(directory_path.joinpath(myfile.name))
            print('文件整理已完成!')4、如何运行

直接,使用Python + 脚本运行即可
# 直接通过命令行,就可以运行PS C:\Users\>python file_org.py5、看一下效果吧

直接将脚本中的路径,换成你自己的就可以了

http://picx.zhimg.com/v2-1f7c97cc1e3f4180c6c00c614d9b56d0_r.jpg?source=1940ef5c
好了,就分享到这里了。最后推荐一套Python视频,非常适合想深入了解 Python 语言的小伙伴,让编程更简单,自学更轻松!
快速上手 Python 语言~~~~如果喜欢请关注+点赞+收藏哦!~~~~~

kin 发表于 2023-10-9 01:09:05

处理Excel、Word、PDF等常用办公软件,处理CSV文件和JSON数据,从Web抓取网络信息,批量处理大量图片,发送电子邮件和短信等等,用Python都可以轻松完成!
光说不练假把式,人邮君举几个有趣的、实用的例子一起看看叭~
1、从多个PDF中合并选择的页面

假定你有一个很无聊的任务,需要将几十个PDF 文档合并成一个PDF 文档。每一个文档都有一个封面作为第一页,但你不希望合并后的文档中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单地将文档合并在一起。
让我们来写一个Python 程序,定制需要合并到PDF 中的页面。
总的来说,程序需要完成以下任务。

[*]找到当前工作目录中的所有PDF 文档。
[*]按文档名排序,这样就能有序地添加这些PDF。
[*]除了第一页之外,将每个PDF 的所有页面写入输出的文档。
从实现的角度来看,代码需要执行以下操作。

[*]调用os.listdir(),找到当前工作目录中的所有文件,并去除非PDF 文档。
[*]调用Python 的sort()列表方法,将文档名按字母排序。
[*]为输出的PDF 文档创建PdfFileWriter 对象。
[*]循环遍历每个PDF 文档,为它创建PdfFileReader 对象。
[*]针对每个PDF 文档,循环遍历每一页,第一页除外。
[*]将页面添加到输出的PDF。
[*]将输出的PDF 写入一个文档,名为allminutes.pdf。
针对这个项目,打开一个新的文件编辑器窗口,将它保存为combinePdfs.py。
第 1 步:找到所有PDF 文档

首先,程序需要取得当前工作目录中所有带.pdf 扩展名的文档列表,并对它们排序。
让你的代码看起来像这样:

http://picx.zhimg.com/v2-8f9be21090f068f48c814b2940561f75_r.jpg?source=1940ef5c
在#!行和介绍程序做什么的描述性注释之后,代码导入了os 和PyPDF2 模块①。os.listdir('.')调用将返回当前工作目录中所有文档的列表。代码循环遍历这个列表,将带有.pdf 扩展名的文档添加到pdfFiles 中②。然后,列表按照字典顺序排序,调用sort()时需要带有key/str.lower 关键字参数③。
代码创建了一个PdfFileWriter 对象,以保存合并后的PDF 页面④。最后,使用一些注释语句简要描述了剩下的程序。
第 2 步:打开每个PDF 文档

现在,程序必须读取pdfFiles 中的每个PDF 文档。在程序中加入以下代码:

http://pica.zhimg.com/v2-0216a2c0e5844435842232777231ddc2_r.jpg?source=1940ef5c
针对每个PDF 文档,循环内的代码调用open(),以'wb'作为第二个参数,用读二进制的模式打开文档。open()调用会返回一个File 对象,它被传递给PyPDF2.PdfFileReader(),以创建针对那个PDF 文档的PdfFileReader 对象。
第 3 步:添加每一页

针对每个PDF 文档,程序需要循环遍历每一页,第一页除外。在程序中添加以下代码:

http://pica.zhimg.com/v2-72eaa0fae9d604481dc685a9eb18a64b_r.jpg?source=1940ef5c
for 循环内的代码将每个Page 对象复制到PdfFileWriter 对象。要记住,你需要跳过第一页。因为PyPDF2 认为0 是第一页,所以循环应该从1 开始①,然后向上增长到pdfReader.umPages 中的整数,但不包括它。
第 4 步:保存结果

在这些嵌套的for 循环完成后,pdfWriter 变量将包含一个PdfFileWriter 对象,以合并所有PDF 的页面。最后一步是将这些内容写入硬盘上的一个文档。在程序中添加以下代码:

http://pica.zhimg.com/v2-d6d320d9dfdd6a4568c3b4d8fee47432_r.jpg?source=1940ef5c
向open()传入'wb',以写二进制的模式打开PDF 文档allminutes.pdf。然后,将得到的File 对象传给write()方法,以创建实际的PDF 文档。调用close()方法,结束程序。
2、向会员发送会费提醒电子邮件

假定你一直“自愿”为“强制自愿俱乐部”记录会员会费。这确实是一项枯燥的工作,包括维护一个电子表格,记录每个月谁交了会费,并用电子邮件提醒那些没交的会员。你不必自己查看电子表格,而是向会费逾期的会员复制、粘贴和发送相同的电子邮件。
让我们用Python编写一个脚本,帮你完成任务。
在较高的层面上,下面是程序要完成的任务。

[*]从Excel 电子表格中读取数据。
[*]找出上个月没有交费的所有会员。
[*]找到他们的电子邮件地址,向他们发送针对个人的提醒。
这意味着代码需要执行以下操作。

[*]用openpyxl 模块打开并读取Excel 文档的单元格(处理Excel 文档参见第13 章)。
[*]创建一个字典,包含会费逾期的会员。
[*]调用smtplib.SMTP()、ehlo()、starttls()和login(),登录SMTP 服务器。
[*]针对会费逾期的所有会员,调用sendmail()方法,发送针对个人的电子邮件提醒。
打开一个新的文件编辑器窗口,并保存为sendDuesReminders.py。
第 1 步:打开Excel 文件

假定用来记录会费支付的Excel 电子表格看起来如图 18-2 所示,放在名为duesRecords.xlsx的文件中。可以从异步社区本书对应页面下载该文件。该电子表格中包含每个成员的姓名和电子邮件地址。每个月有一列,用来记录会员的付款状态。在成员支付会费后,对应的单元格就记为paid。
该程序必须打开duesRecords.xlsx,通过读取sheet.max_column 属性,弄清楚最近一个月的列。
在文件编辑器窗口中输入以下代码:

http://picx.zhimg.com/v2-baef4c9a48e842f7bd29cfe816300f09_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-09ec8485d1f31498c1902ceeed22bc2f_r.jpg?source=1940ef5c

记录会员会费支付的电子表格

导入openpyxl、smtplib 和sys 模块后,我们打开duesRecords.xlsx 文件,将得到的Workbook 对象保存在wb 中①。然后取得Sheet1,将得到的Worksheet 对象保存在sheet中②。既然有了Worksheet 对象,就可以访问行、列和单元格了。我们将最后一列保存在lastCol 中③,然后用行号1 和lastCol 来访问应该记录着最近月份的单元格。取得该单元格的值,并将其保存latestMonth 中④。
第 2 步:查找所有未支付会费的成员

一旦确定了最近一个月的列数(保存在lastCol 中),就可以循环遍历第一行(这是列标题)之后的所有行,看看哪些成员在该月会费的单元格中写着paid。如果会员没有支付会费,就可以从列1 和列2 中分别抓取成员的姓名和电子邮件地址。这些信息将放入unpaidMembers字典,它记录最近一个月没有交费的所有成员。将以下代码添加到sendDuesReminder.py 中:

http://pica.zhimg.com/v2-b1eefb26f61dde204a5041870caa9d0c_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-1a637d7c4338ea19dbeb44de90b5e61a_r.jpg?source=1940ef5c
这段代码设置了一个空字典unpaidMembers,然后循环遍历第一行之后所有的行①。对于每一行,最近月份的值保存在payment 中②。如果payment 不等于'paid',则第一列的值保存在name 中③,第二列的值保存在email 中④,将name 和email 添加到unpaidMembers 中⑤。
第 3 步:发送定制的电子邮件提醒

得到所有未付费成员的名单后,就可以向他们发送电子邮件提醒了。将下面的代码添加到程序中,但要代入你的真实电子邮件地址和提供商的信息:

http://pic1.zhimg.com/v2-1c47901ac04c9c7b0a0f49ea810d211c_r.jpg?source=1940ef5c
调用smtplib.SMTP()并传入提供商的域名和端口,来创建一个SMTP 对象。调用ehlo()和starttls(),然后调用login(),并传入你的电子邮件地址和sys.argv(其中保存着你的口令字符串)。在每次运行程序时,将口令作为命令行参数输入,避免在源代码中保存口令。程序登录到你的电子邮件账户后,就应该遍历unpaidMembers 字典,向未支付会费的会员的电子邮件地址发送针对个人的电子邮件。将以下代码添加到sendDuesReminders.py:

http://picx.zhimg.com/v2-8d6dd94f99f66a8d3e3e038399cb713a_r.jpg?source=1940ef5c
这段代码循环遍历unpaidMembers 中的姓名和电子邮件。对于每个没有付费的成员,我们用最新的月份和成员的名称定制了一条消息,并保存在body 中。输出表示正在向这个会员的电子邮件地址发送电子邮件。然后调用sendmail(),向它传入地址和定制的消息。返回值保存在sendmailStatus 中。
回忆一下,如果SMTP 服务器在发送某个电子邮件时报告错误,sendmail()方法将返回一个非空的字典值。for 循环的最后部分在④行检查返回的字典是否非空,如果非空,则输出收件人的电子邮件地址以及返回的字典。
程序完成发送所有电子邮件后,调用quit()方法,与SMTP 服务器断开连接。
如果运行该程序,输出结果会像这样:

http://pic1.zhimg.com/v2-664979a5477ff339a8f1277cf469758a_r.jpg?source=1940ef5c
收件人会收到一封关于他们未支付会费的邮件,看起来就像你手动发送的邮件一样。
——
《Python编程快速上手 让繁琐工作自动化 第2版》中还有很多这样有意思又实用的例子,比如“简单的倒计时程序”、“生成随机的测验试卷文件”、“取得当前的天气数据”等等,步骤清晰,简单易用,各行各业的人都可以学习使用,真正实现零基础快速入门。

http://pic1.zhimg.com/v2-b6f37a24321b9c21116517786c763145_r.jpg?source=1940ef5c
没有编程基础的同学也不用担心,本书就是一本面向初学者的Python编程实用指南。
本书的第一部分介绍了基本的Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。附录部分提供了所有习题的解答。这本经典畅销书也是刚刚在千呼万唤中出版了第2版,重磅升级以给大家带来更好的学习体验,更详细的介绍了解一下——
<a href="http://zhuanlan.zhihu.com/p/357399190" data-draft-node="block" data-draft-type="link-card" data-image="http://pic2.zhimg.com/v2-b6f37a24321b9c21116517786c763145_ipico.jpg" data-image-width="750" data-image-height="714" class="internal">人民邮电出版社:《Python编程快速上手——让繁琐工作自动化》第2版的中文版上市了! ========
赠人玫瑰,手留余香,不要忘记点赞、收藏、关注 @人民邮电出版社 哦~
一键三连,感恩有你~

1qaz 发表于 2023-10-9 01:09:37

http://pica.zhimg.com/v2-20dd18def869d77f48110aa8cc779cef_r.jpg?source=1940ef5c
看了很多回答,大多数是对Excel数据的批量操作,今天就整点不一样的:用Python自动美化表格!
之前写过一篇文章:
有没有推荐的大学生书单?在这篇文章中,我用Python爬虫爬取了全国20多个图书馆的热门借阅图书信息,并按照一定的规则做了统计汇总,得到了这一份大学生各领域必读TOP150书单,这份书单分领域保存在Excel的50多个sheet页中,每个sheet页的文件是这样子的:

http://pic1.zhimg.com/v2-76b19d698e681defd4fc13b75487ce63_r.jpg?source=1940ef5c

原始excel


虽然内容非常优质,但是这些挤在一块的内容,根本没有人会有兴趣看下去,起码得调整一下格式,做个简单的美化,让excel更易读吧。
而50多个shee页如果分别去调格式的话,也是个不小的工作量,这个时候,Python的用武之地就来了!我可以用Python批量美化这些excel的格式,节省大量的时间。
Python对excel的操作我用到了xlwings这个包。
xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改,还可以和matplotlib、numpy、pandas无缝连接,支持读写numpy、pandas数据类型,并将matplotlib可视化图表导入到excel中,更重要的是,在操作excel的时候,你可以实时看到效果,可以说这是我最喜欢的处理excel的Python包了。
xlwings的使用方式也非常简单,只需要:
import xlwings as xw
这里我们主要使用其修改单元格格式的功能。
用python美化excel分为三步:

第1步,先自己用excel制作一个格式模板,调整行高、列宽等,并命名为sample.xlsx。
因为行高和列宽都是一些数值,用代码的方式调整不太直观,所以采用在模板excel上调整好,然后应用到目标excel的方式。制作好的格式模板如下:

http://picx.zhimg.com/v2-408556da493fae5c2983c74ced74d6f7_r.jpg?source=1940ef5c

格式模板

第2步,让程序读取这个模板里的格式,告诉程序接下来所有的shee页都按照这个格式来美化。
#获取样例表格的列宽数据
def get_sample_format(col):##因为无需读取整个excel所有列的列宽,所以这里传入一个读取的列宽范围参数
    wb = xw.Book("sample.xlsx")# 建立于sample.xlsx文件的连接
    sheet = wb.sheets["sheet1"] #打开sample.xlsx文件的sheet1
    format = []
    for i in range(col):
      format.append(sheet.column_width)
    print('列宽:'+str(format))#'行高:'+sheet.range('A1').column_width+
    wb.close()
    return format第3步,让程序批量操作这50个shee页,按照模板的列宽进行设置,同时修改一些字体、单元格背景等。
## 美化表格todo:还需要一个异常退出https://blog.csdn.net/qq_37289115/article/details/107322332
def beautiful_sheet(table_name,raw,col,format):
   #设置颜色
    wb2 = xw.Book(table_name)# 建立excel表连接

    sheets_name=
    for st insheets_name:
      sheet2 = wb2.sheets
      # sheet2 =
      sheet2.range('a1').value= ['序号','书名(@知乎 东写西读整理)','总浏览次数','霸榜高校数','霸榜率','在高校榜单排名中位数','豆瓣评分','豆瓣链接(@知乎 东写西读整理)'] #更改标题行
      sheet2.api.Borders(12).LineStyle = 0 #设置单元格横边框为细框线
      sheet2.api.Borders(11).LineStyle = 0 #设置单元格竖边框为细框线
      sheet2.api.Font.Name = '微软雅黑'# 设置字体格式为微软雅黑
      sheet2.api.HorizontalAlignment = -4108#设置字体居中
      sheet2[:,4].api.NumberFormat = "0%"    #“霸榜率”这一列单元格设置为百分比格式显示
      for i in range(raw): ##行遍历
                if i==0:
                  sheet2.color = #设置标题背景颜色格式
                elif i%2 ==0:
                  sheet2.color =     #设置偶数行背景颜色格式为浅蓝色
      for i,item in enumerate(format): #列遍历,根据sample.xlsx中的列宽进行调整
            sheet2.column_width = item
    wb2.save()#保存excel
    wb2.close()#关闭excel
    return None
运行程序,优化后的excel是这个样子的:

http://pica.zhimg.com/v2-bf478cd7a2045960464200e353bf6799_r.jpg?source=1940ef5c
这样看起来就舒服多了!当然,如果对里边的书籍感兴趣,也可以去这篇文章:有没有推荐的大学生书单?找到详细的书籍链接。
最后,附上完整代码:
import xlwings as xw

#获取样例表格的列宽数据
def get_sample_format(col):##因为无需读取整个excel所有列的列宽,所以这里传入一个读取的列宽范围参数
    wb = xw.Book("sample.xlsx")# 建立于sample.xlsx文件的连接
    sheet = wb.sheets["sheet1"] #打开sample.xlsx文件的sheet1
    format = []
    for i in range(col):
      format.append(sheet.column_width)
    print('列宽:'+str(format))#'行高:'+sheet.range('A1').column_width+
    wb.close()
    return format
## 美化表格todo:还需要一个异常退出https://blog.csdn.net/qq_37289115/article/details/107322332
def beautiful_sheet(table_name,raw,col,format):
   #设置颜色
    wb2 = xw.Book(table_name)# 建立excel表连接

    sheets_name=
    for st insheets_name:
      sheet2 = wb2.sheets
      # sheet2 =
      sheet2.range('a1').value= ['序号','书名(@知乎 东写西读整理)','总浏览次数','霸榜高校数','霸榜率','在高校榜单排名中位数','豆瓣评分','豆瓣链接(@知乎 东写西读整理)'] #更改标题行
      sheet2.api.Borders(12).LineStyle = 0 #设置单元格横边框为细框线
      sheet2.api.Borders(11).LineStyle = 0 #设置单元格竖边框为细框线
      sheet2.api.Font.Name = '微软雅黑'# 设置字体格式为微软雅黑
      sheet2.api.HorizontalAlignment = -4108#设置字体居中
      sheet2[:,4].api.NumberFormat = "0%"    #“霸榜率”这一列单元格设置为百分比格式显示
      for i in range(raw): ##行遍历
                if i==0:
                  sheet2.color = #设置标题背景颜色格式
                elif i%2 ==0:
                  sheet2.color =     #设置偶数行背景颜色格式为浅蓝色
      for i,item in enumerate(format): #列遍历,根据sample.xlsx中的列宽进行调整
            sheet2.column_width = item
    wb2.save()#保存excel
    wb2.close()#关闭excel
    return None


if __name__ == '__main__':
    table_name = "Top150.xlsx"#需要修改的excel名字
    raw = 151 #需要修改格式的行数
    col = 8##需要修改格式的列数
    format = get_sample_format(col)
    beautiful_sheet(table_name,raw,col,format)
<hr/>最后,在这个信息化时代,Python这门语言是最适合非程序员来、解放重复劳动的,这门语言能做的非常多。对于零基础编程的小白来说,可以借助有完整培养体系的在线教程来尽快入门,这里推荐一款结合教程和课程的编程学习产品:夜曲编程。
这是百词斩旗下的一款Python学习产品,是的,就是那个曾经帮助我们背单词的百词斩,又来在编程方面搞事情了。
产品有三大功能:
一)图文结合的课程快速理解知识
用生动形象的比喻,帮助初学者理解编程概念,比如对于面向对象语言中“类”这个概念,是这样描述的:

http://pic1.zhimg.com/v2-544fc95a27c52a83981017d11df405ef_r.jpg?source=1940ef5c



学完每节课程之后,会有学习总结:而且还附上互联网大佬们的名言,趣味性满满。

http://picx.zhimg.com/v2-0bc4fbe62b7ada824ff23206f99b380d_r.jpg?source=1940ef5c

课程完结

二)精美概念卡片便于随时复习
概念卡是用生动形象的图文比喻帮助理解编程专业概念,代码卡是拆解代码语法格式,便于更扎实的掌握代码写法。一张张搜集这些卡片的过程,也给人一种类似于玩游戏的快感,爽到根本停不下来。

http://picx.zhimg.com/v2-3f6c0892a6fd132f62affd8645ab2e8d_r.jpg?source=1940ef5c

概念卡

三)百题斩弥补缺少练习的缺陷
提供一百道编程题,并提供在线练习环境和参考答案,可以在线运行代码,有点像leetcode,但是界面更加精美,而且能方便地看到答案。
题目从买猫粮到选手机应有尽有。据说按时完成所有的任务还可以获得蓝牙键盘等奖励赚回学费。随便截个图看看:

http://pica.zhimg.com/v2-19f380dd6395956df014e34e384d63ae_r.jpg?source=1940ef5c

百题斩

现在去「夜曲编程」回复一下“免费教程”,就能白嫖体验免费且扎实的课程,里面的免费内容基本上讲得清楚,自学也够用。
如果觉得有用,给个三连可好?

lygcss 发表于 2023-10-9 01:10:30

Python的确是一个了不起的编程语言和工具,它可以用来构建各种脚本和实用程序,这些脚本和实用程序可以帮助你化繁为简、让很多事情都实现自动化......以下是从海外博客上学习积累到的,做个分享,如果感兴趣,会陆陆续续做些编辑补充。
利用Python实现电脑鼠标和键盘自动化

这次,我们会使用Python模块PyAutoGUI来使我们的鼠标和键盘自动化。曾经看到许多与PyAutoGUI相关的文章,不过在这里我们可以尝试提供一些使用此模块的独特玩法。
安装步骤
Windows上:在该系统安装和使用PyAutoGUI非常容易。如果已安装pip,则可以用pip,从PyPI安装它。
pip install pyautoguiOs X上:需要安装一些额外的模块才能运行PyAutoGui。
pip3 install pyobjc-core
pip3 install pyobjc
pip3 install pyautoguiLinux上:同样的,也必须安装一些软件包。
pip3 install python3-xlib
sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev
pip3 install pyautogui好的,开始吧,使用PyAutoGUI执行以下操作
(注:如果你想制作出更有逼格的自动化工具,则可以将后面的模块集成到Selenium、OpenCV等其它一些出色的模块中)
1)安全功能
安全-停顿
“停顿“是PyAutoGUI中的一个选项,用于设置每次模块调用之间的“停顿“时间,假设,我们有两个功能,一个是write操作,另一个是click操作,则经配置该选项,第二个功能在配置的“一个时间间隔”之后执行。
pyautogui.PAUSE = dur # 2.5安全-故障安全
此选项的作用类似于使用CTRL + C取消程序,如果此选项设置成True,则pyautogui.FailSafeException通过将鼠标移至屏幕的左上角来中止程序并声明异常。
pyautogui.FAILSAFE = True2)鼠标功能
鼠标-移动
我们可以使用pyautogui class的以下功能将鼠标移至屏幕的x,y坐标

http://picx.zhimg.com/v2-f474e0dda44a29b74b40234a2b44d980_r.jpg?source=1940ef5c

鼠标移动

pyautogui.moveTo(x, y, duration=num_seconds)
其中x和y是屏幕上的XY坐标,x向右增加,y向向下增加;duration是以秒为单位的时间,该时间使鼠标的移动根据时间而变慢;还有另一个功能,它使鼠标相对于鼠标的当前位置移动,这简单地意味着它将从当前鼠标位置向左和向右移动鼠标(100,100)。
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)
# 你也可以使用 pyautogui.move(xOffset, yOffset) 去实现这里,xOffset和yOffset分别是鼠标x和y到当前位置的增量。
鼠标-拖拽
另一个很棒的功能是“拖动鼠标”,拖动指的是在按住单击按钮的同时移动鼠标,你可以通过以下功能实现拖动。

http://picx.zhimg.com/v2-b0be2d7537f55e60232dfcfba79f5eaa_r.jpg?source=1940ef5c
pyautogui.dragTo(x, y, duration=num_seconds)
pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)
# 你仍旧可以用 pyautogui.drag(xOffset, yOffset) 鼠标-点击次数
日常中我们可以使用鼠标执行不同类型的点击,同样PyAutoGUI可以让我们实现许多相似的功能:

[*]单击、双击和三次点击
[*]鼠标按键向上和向下事件
[*]左点击、右点击和中间点击
语法
pyautogui.click(x=None, y=None, clicks=1, interval=0.0,
button='left', duration=0.0)click()功能的实践
pyautogui.click() # 在现有位置点击鼠标
pyautogui.click(20,10) # 移动到 20, 10, 然后左点鼠标
# 你也可以传递一个python的元组 (20,10)
pyautogui.click(button='right') # 右键单击鼠标
pyautogui.click(button='middle') # 点击鼠标中间键
pyautogui.click(button='left') # 左键单击鼠标
# 你也可以通过上面的方法传递它
pyautogui.click(clicks=2) # 双击鼠标左键
pyautogui.click(clicks=2, interval=0.25) # 双击鼠标左键,但两次单击之间的间隔为0.25秒
pyautogui.click(button='right', clicks=3, interval=0.25) ## 击鼠标右键,两次单击之间有0.25秒的暂停也有单独的功能来完成相同的工作。
pyautogui.doubleClick()#鼠标左键双击
pyautogui.rightClick()#右键单击
pyautogui.middleClick()#中键单击
pyautogui.trippleClick()#左键三次
每个功能都有更多可选属性,例如x和y坐标,持续时间和间隔鼠标的点击和拖动包括按下鼠标按键并向上放开鼠标按键,如果要单独执行这些操作,请调用mouseDown()和mouseUp()函数,它们具有相同的x,y和button。
3)滚动功能
可以通过调用scroll()函数并传递整数个“单击”来滚动鼠标滑轮,在不同平台上,“单击”中的滚动量会有所不同。
语法
pyautogui.scroll(clicks, x=None, y=None)你可以使用如下scroll()功能:

http://picx.zhimg.com/50/v2-f071cb3f44dced1900f11915dfabd90e_720w.gif?source=1940ef5c

鼠标滚动

pyautogui.scroll(10)   #向上滚动10次“单击”
pyautogui.scroll(-10)#向下滚动10次“单击”
pyautogui.scroll(10,x = 100,y = 100)#将鼠标光标移至100、200,然后向上滚动10次“点击”你可以hscroll()在linux和OSX平台中左右滚动。
4)键盘功能
键盘-键入
我们可以在pyautogui class中的函数的帮助下录入字母、单词或句子,它还提供了每个键入单词之间的延迟,这使它更加炫酷。
pyautogui.typewrite('Hello world!') #即可输出“ Hello world!”如果要为这个句子添加动画效果,而且希望电脑在一小段时间后编写这个句子,可以使用interval属性。
pyautogui.typewrite('Hello world!',interval = 0.25)
#打印出“ Hello world!” 每个字符后延迟0.25秒键盘-按特殊指令按键

http://pic1.zhimg.com/50/v2-ea69e3afa5b7ca799e540dc9b120f32f_720w.gif?source=1940ef5c

按特殊按键

要按上面这些键,请调用该press()函数并将字符串中定义的值传递给该函数。
要按下多个键,传递一个元组或键列表,还需要采用另一个可选属性presses=1 来限制按键的按下次数;还有一个属性interval=0.0,它是设定每次按键之间的间隔。
定义了此功能的键,可以通过以下选项进行检索pyautogui.KEYBOARD_KEYS,它会输出所支持的已定义键的列表。例如:enter,up,down,esc,f1。参见:
Keyboard Control Functionspyautogui.press('enter')#按Enter键
pyautogui.press('f1')   #按F1键
pyautogui.press('left')   #按向左箭头键press()只不过是keyUp()和keyDown()功能的封装包,它模拟按下一个键然后放开它。
pyautogui.keyDown('shift')#按住Shift键
pyautogui.keyUp('shift')    #释放Shift键按键-快捷方式
为了方便快捷地按下键盘快捷键,hotkey()可以传递几个键字符串,这些字符串将按顺序按下,然后以相反的顺序释放。
pyautogui.hotkey('ctrl','shift','esc')#同时按下CTRL + SHIFT + ESC上面的代码相当于:
pyautogui.keyDown('ctrl')   #按住CTRL按钮
pyautogui.keyDown('shift')    #按住SHIFT按钮
pyautogui.keyDown('esc')      #按住ESC按钮
pyautogui.keyUp('esc')      #释放ESC按钮
pyautogui。 keyUp('shift')      #释放SHIFT按钮
pyautogui.keyUp('ctrl')       #释放CTRL按钮5)消息提示功能
PyAutoGUI还显示JavaScript样式的提示框,一共有四种提示框功能:
消息提示-报错/警示
显示带有文本和单个“确定”按钮的简单消息框,返回单击的按钮的文本。

http://pica.zhimg.com/50/v2-a49d35a3b64088c8091d071346b9da39_720w.jpg?source=1940ef5c

报错

pyautogui.alert(text='', title='', button='OK')消息提示-确认窗口
显示带有“确定”和“取消”按钮的消息框,可以自定义按钮的数量和文本,返回单击的按钮的文本。

http://pic1.zhimg.com/50/v2-07ca3e8029fee12aaede77dd7dc4e4d1_720w.jpg?source=1940ef5c

确认窗口

pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel'])消息提示-提醒窗口
显示带有文本输入以及“确定”和“取消”按钮的消息框。返回输入的文本,如果单击“取消”,则返回“无”。

http://pica.zhimg.com/50/v2-b94ccb24c238cb5b50cfa3434ea96cc1_720w.jpg?source=1940ef5c

提醒窗口

pyautogui.prompt(text='', title='' , default='')消息提示-密码输入
显示带有文本输入以及“确定”和“取消”按钮的消息框,输入的字符显示为*。返回输入的文本,如果单击“取消”,则返回“无”。

http://picx.zhimg.com/50/v2-6c8d028574a6622c3e90bc8b0a515642_720w.jpg?source=1940ef5c

密码录入

password(text='', title='', default='', mask='*')6)屏幕截图功能
PyAutoGUI可以截取屏幕截图,将其保存到文件中,并在屏幕上定位图像。如果你需要单击一个按钮(图片类型)并想在屏幕上找到它的位置,这个方法会很有用。
截屏-截图
调用screenshot()将返回一个Image对象,传递文件名字符串将把屏幕截图保存到文件中,并将其作为Image对象返回。
im1 = pyautogui.screenshot()
im2 = pyautogui.screenshot('my_screenshot.png')如果你不需要整个屏幕的屏幕截图,那么还有一个可选的region关键字参数,,你可以传递区域的左侧、顶部、宽度以及高度的四整数元组来捕获:
im = pyautogui.screenshot(region =(0,0,300,400))截屏-在屏幕上找到图像
如果想快速定位屏幕中上的图像文件,当然可以在屏幕上直观地找到它们,譬如,假设计算器应用程序正在您的计算机上运行,​​如下所示:

http://pic1.zhimg.com/50/v2-2689b79db0da7899c5570191199e3107_720w.jpg?source=1940ef5c
同时其中包含一个按钮的图像,譬如是按钮“7”:

http://pica.zhimg.com/50/v2-e5b1f53258be0319d615b2e56ff844ad_720w.jpg?source=1940ef5c
你可以调用该locateOnScreen('7key.png')函数以获取屏幕坐标,返回值为4整数元组:左、上、宽度、高度,不过,如果你只想在屏幕上显示图像的x和y坐标,则可以调用locateCenterOnScreen()它,该方法将仅返回x和y坐标;如果找不到屏幕上的图像,它将升高ImageNotFoundException;如果要单击该图像或对象,只需将先前函数的返回值中的x和y坐标传递给click()function。
要了解有关在屏幕上定位对象的更多信息,请访问此链接:
https://pyautogui.readthedocs.io/en/latest/screenshot.html#the-locate-functions7)其它
其它-屏幕尺寸
为了获取屏幕尺寸,PyAutoGUI具有一个size()返回整数元组的函数:(宽度,高度)表示主监视器的尺寸。
pyautogui.size()    #输出:Size(width = 1366,height = 768)其它-光标位置
为了获取光标的当前位置,PyAutoGUI有一个函数position()返回整数元组:(x,y)表示鼠标光标的当前位置。
pyautogui.position()#输出 :点(x = 487,y = 664)
后续会陆陆续续补上一些其它有趣的办公自动化技巧
页: [1]
查看完整版本: 你们都用 Python 实现了哪些办公自动化?