2013 年微信 5.0 版本内置了一款经典小游戏-灰黑色版飞机大战,被称为微信经典飞机大战,在这个版本中微信甚至将欢迎设置了成了这款小游戏,用户首次登陆将会直接进入飞机大战小游戏,游戏一经推出也是火爆异常,当时还出现了许多经典语录。
想知道未来孩子长相?Python人脸融合告诉你
和换脸算法的简单粗暴相比,人脸融合算法就要弹性的多。顾名思义,人脸融合是对两张人脸进行融合处理,生成的人脸同时具备两张人脸的外貌特征。人脸融合有什么实际意义呢?一个简单的应用就是用父母双方的脸部图片融合,得到未来孩子可能的长相。
本文通过百度AI开放平台的人脸融合功能来做一个简单的试验。
不会编程的程序员不用懂递归
编程之所以魅力无比,其中一个重要的原因是,一次写入,多次运行,你可能和我一样想象过这样的场景:半躺在椅子上,优雅的点击一个按钮,新的宇宙启动了……
不要觉得这是个幻想,也别只将其停留在幻想之中,这个幻想说明了一个问题,程序可以帮助我们完成更多的事情,而起始点无比的简单,今天我们一起聊聊递归的事情,也许它就是启动宇宙的那个小小按钮
不到100行代码制作各种证件照
不到100行代码制作各种证件照
生活中经常需要使用各种版本的电子版证件照,如:红底、蓝底、白底、一寸、两寸等等。在 Python 中替换图片背景色可以用 Image 模块,利用 Image 模块可以改变图片大小、背景色等操作。
Excel 神器 —— OpenPyXl
无论是日常办公还是编程,总是离不开 Excel,用来导入导出数据,记录数据,统计分析,画原型,甚至在日本有位老爷爷用 Excel 来创作绘画
虽然 Excel 功能强大,操作便利,但是有些场景下还是不太方便,例如 将大量数据导入到 Excel,将 Excel 中的数据读取到系统中,或者按照某种结构格式化下原有数据,批量处理大量 Excel 文档等,幸运的是,有很多 Python 库可以帮助我们用程序来控制 Excel,完成难以手工完成的任务,现在就来了解下吧
Python 下的 Excel 库
Python 中有大量的原生和第三方 Excel 操作包,各有所长,不过对于刚使用 Python 与 Excel 交互的同学来说,可能有点目不暇接,所以先简单梳理一下常见的一些 Excel 包
- OpenPyXL 是个读写 Excel 2010 xlsx/xlsm/xltx/xltm 的 Python 库,简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点
- xlwings 是一个基于 BSD 授权协议的 Python 库,可以轻松的使用 Python 操作 Excel,也可以在 Excel 中调用 Python,以接近 VBA 语法的实现 Excel 编程,支持 Excel 宏,并且可以作为 Web 服务器,提供 REST API 接口
- pandas 数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器
- win32com 从命名上就可以看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操作。需要注意的是,该库不单独存在,可通过安装 pypiwin32 或者 pywin32 获取
- Xlsxwriter 拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与 openpyxl 相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始
- DataNitro 一个 Excel 的付费插件,内嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,同时可以与其他 python 库协同。
- xlutils 基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特点中规中矩,比较大的缺点是仅支持 xls 文件。
概括一下:
- 不想使用 GUI 而又希望赋予 Excel 更多的功能,openpyxl 与 xlsxwriter,二者可选其一;
- 需要进行科学计算,处理大量数据,建议 pandas+xlsxwriter 或者 pandas + openpyxl,是不错的选择;
- 想要写 Excel 脚本,会 Python 但不会 VBA,可考虑 xlwings 或 DataNitro;
- win32com 功能还是性能都很强大,不过需要一定的 windows 编程经验才能上手,它相当于是 windows COM 的封装,另外文档不够完善
OpenPyXL
OpenPyXl 几乎可以实现所有的 Excel 功能,而且接口清晰,文档丰富,学习成本相对较低,今天就以 OpenPyXL 为例,了解下如何操作 Excel
安装
用 pip 安装
1 |
|
安装成功后,可以跑通下面测试:
1 |
|
基本概念
- workbook 相当于一个 Excel 文件档,每个被创建和打开的 Excel 文件都是独立的 Workbook 对象
- sheet Excel 文档中的表单,每个 Excel 文档至少需要一个 sheet
- cell 单元格,是不可分割的基本数据存储单元
小试牛刀
先来看跑个测试
1 |
|
需要注意的是:
- 新创建的 workbook 对象,会自带一个名为 Sheet 的表单,Office Excel 新建会创建 3 个
- 创建的 workbook 会将第一个
表单
激活,通过 wb.active 获取引用 - 像
python-docx
work 库一样,save 方法会立即保存,不会有任何提示,建议选择不同文件名来保存
常用功能
OpenPyXl 功能很多,从单元格处理到图表展示,涵盖了几乎全部的 Excel 功能,这里就一些常用的功能做展示,更多的用法可以参考 OpenPyXl 文档(文末参考里有链接)
创建和打开 Excel
小试牛刀部分看到了如何创建一个 Excel
如果要加载一个已存在的 Excel 文件,需要用 load_workbook
方法,给定文件路径,返回 workbook 对象:
1 |
|
load_workbook
除了参数 filename
外为还有一些有用的参数:
read_only
:是否为只读模式,对于超大型文件,要提升效率有帮助keep_vba
:是否保留 vba 代码,即打开 Excel 文件时,开启并保留宏guess_types
:是否做在读取单元格数据类型时,做类型判断data_only
:是否将公式转换为结果,即包含公式的单元格,是否显示最近的计算结果keep_links
:是否保留外部链接
操作 sheet
1 |
|
- 每个 Workbook 中都有一个被激活的 sheet,一般都是第一个,可以通过 active 直接获取
- 可以通过 sheet 名来获取 sheet 对象
- 创建 sheet时需要提供 sheet 名称参数,如果该名称的 sheet 已经存在,则会在名称后添加 1,再有重复添加 2,以此类推
- 获得 sheet 对象后,可以设置 名称(title),背景色等属性
- 同一个 Workbook 对象中,可以复制 sheet,需要将源 sheet 对象作为参数,复制的新 sheet 会在最末尾
- 可以删除一个 sheet,参数是目标 sheet 对象
操作单元格
单元格(cell)是 Excel 中存放数据的最小单元,就是图形界面中的一个个小格子
OpenPyXl 可以操作单个单元格,也可以批量操作单元格
单独操作
单独操作,即通过 Excel 单元格名称或者行列坐标获取单元格,进行操作
1 |
|
- 可以通过单元格名称设置,类似于 sheet 的某种属性
- 也可以通过行列坐标类设置
批量操作
需要一下子操作多个单元格时,可以用批量操作来提高效率
- 指定行列
1 |
|
- 所有行或者列
1 |
|
- 设置整行数据
1 |
|
合并单元格
1 |
|
- sheet 对象的 merge_cells 方法是合并单元格,unmerge_cells 是解除合并
- 分别有两种参数形式,一种是用单元格名称方式指定,另一种是通过命名参数指定
- 注意:对于没有合并过单元格的位置调用 unmerge_cells 时回报错
单元格格式
OpenPyXl 用6中类来设置单元格的样式
NumberFormat
数字Alignment
对齐Font
字体Border
边框PatternFill
填充Protection
保护
1 |
|
- 引入字体类
- 用 cell 方法,为单元格设置值的同时,设置格式
- 每种格式都有特定的属性,为其设置特定的格式对象
- 数字格式有点区别,通过设置格式名称来完成,numbers.FORMAT_PERCENTAGE 是个字符串
- Border 类,需要配合 Side 类使用,它们都在 openpyxl.styles 中定义
- 需要注意的是,单元格样式属性只能通过样式对象赋予,而无法通过样式属性来修改,例如
ws.cell(1, 1).font.color = '00FF00'
会报错,如果真要换,需要重新创建一个样式实体,重新赋值
上面展示的是单个单元格格式的设置,也可以批量设置,有两种方式,一种是循环范围内的所有单元格,逐个设置,另一种是对整列或者整行设置:
1 |
|
更多样式类的定义和参数,可参 OpenPyXl 文档
图表
图表是 Excel 中很重要的部分,作为数据可视化的高效工具,利用 OpenPyXl 可以用编程的方式,在 Excel 中制作图表,创建过程和直接在 Excel 中差不多,下面以柱状图和圆饼图为例做演示
柱状图
1 |
|
- 引入柱状图类 BarChart 和 数据应用类 Reference
- 创建 Workbook,并为活动 Sheet 添加数据
- 创建柱状图对象,设置图表属性,type 为
col
为列状图,bar
为水平图 - 创建数据引用对象,指定从那个 sheet 以及数据范围
- 创建系列数据引用对象
- 将数据和系列加入到图表对象中
- 最后将图表对象用 add_chart 添加到 sheet 里
圆饼图
1 |
|
- 引入饼图类 PieChart 和 数据应用类 Reference
- 创建图表数据
- 创建图表对象,设置图表标题
- 定义标签数据引用和数据引用,并将其加入到图表
- 将图表对象添加到 sheet 的指定位置
总结
今天以 OpenPyXl 库为例,了解了 Python 操作 Excel 的基本方法,限于篇幅,无法全面的清晰的介绍更多功能,期望通过这篇短文,激发起您多程序化操作 Excel 的兴趣,让让工作、学习更高效,就如那句名言一样:“ 人生苦短,我用 Python”
参考
- OpenPyXl 文档 https://openpyxl.readthedocs.io
- Excel 作画 https://zhuanlan.zhihu.com/p/34917620
- https://www.jianshu.com/p/be1ed0c5218e
- https://www.douban.com/note/706513912/
- https://blog.csdn.net/weixin_41595432/article/details/79349995
示例代码:https://github.com/JustDoPython/python-examples/tree/master/taiyangxue/pythonxlsx
未命名
如何用 Python 识别车牌
车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下车库门禁也会用到,基本上凡是需要对车辆进行身份检测的地方都会用到。
今天,我用 Python 给武汉人民发一封邮件
2020 年,庚子病痛,从寒冬发酵,一种突然爆发的不知名病毒在无形中慢慢侵蚀一座城—-湖北武汉,后经专家检测这是一种带冠状的新型病毒,和 SARS 很相似,感染力很强,潜伏期在 14 天左右。
不到 150 行代码写一个 Python 版的贪吃蛇
相信大家小时候应该都玩过贪吃蛇这个游戏吧,反正我小时候超喜欢玩,没其他原因,因为家里的手机上只有这一个游戏可以消磨时光。后来随着移动互联网的普及,智能手机逐渐取代了诺基亚,但这款游戏的确堪称经典之作。
今天我们就用 pygame 来自己写一个贪吃蛇出来,重温经典。
短线买股赚钱的概率有多大?python带你来分析
股票操作讲究低买高卖,如果你能买在低点,卖在高点,那么你就是高手;如果你能买在高点,卖在低点,那么你就是“韭菜”。所谓“一盈两平七亏”,对应的是中国的 A 股市场中有 10% 的高手和 70% 的韭菜。进入股市买卖的都觉得自己是高手,最后亏得底裤都没了。 今天我们从一个简单的模型来看看短线交易的成功率有多大?
一文吃透 Jupyter Notebook
notebook 是 Jupyter项目的重要组件之一,它是一个代码、文本(有标记或无标记)、数据可视化或其它输出的交互式文档。Jupyter Notebook 需要与内核互动,内核是 Jupyter 与其它编程语言的交互编程 协议。Python 的 Jupyter 内核是使用 IPython。Jupyter Notebook 是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。,除此之外,它还提供了一系列魔法操作,今天的文章着重讲解关于 Jupyter notebook 的魔法操作。
方便快捷给 PDF 加水印
方便快捷给 PDF 加水印
有文字创作需求的同学有时候会需要将自己的作品集结为 PDF 进行分发,一方面帮助自己整理归档,另一方面也有利于作品传播。类似的需求我们已经讲过《用 Python 抓取公号文章保存成 PDF》。
用 Python 获取股市交易数据
最近受全球大环境影响,美股犹如坐上过山车,感觉每天都在见证历史时刻。而我们的大盘最近也不消停,不过这也给大家抄底制造了机会,但机会都是给有准备的人,想要抓住机会就得懂得分析数据,想要分析数据还得先拿到交易数据,今天就来说说用 Python 如何获取股市交易数据。
使用 FFmpeg 编辑视频
使用 FFmpeg 编辑视频
FFmpeg
FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。主要功能包括视频截取、视频抓图、给视频加水印、提取音频等。
Python 小技之繁花盛开
今天请各位读者朋友欣赏用 Python 实现的鲜花盛宴,你准备好了吗? 90 行代码即可实现一棵美丽的鲜花盛开树。 小编也是鲜花爱护协会者之一,但是想要看到美丽的花朵,得历经很多;对于知识的运用也是如此,需要不断吸收新知识,学习新技能,才能盛开出美丽的花朵。 接下来就看看一棵迷人的花树是怎么实现的吧!
Python 招聘岗位数据可视化
Python 招聘岗位数据可视化
项目背景
最近朋友圈又有小伙伴被降薪、被裁员了。往年金三银四是找工作的好时机,但在今年疫情之下互联网似乎更冷了。为了更好的找到好工作,就要了解企业需要什么样的人才,地区之间人才需求数量,薪资、学历与经验之间的关系等等。本文以拉勾网 Python 岗位数据作为分析。
用 Python 生成 & 识别二维码
说到二维码大家一定不陌生,可以说现在二维码几乎渗透到了我们生活的各个角落,举例来说吧,我们到超市商场购物时扫描二维码付款,我们出行时乘坐公交地铁扫描二维码进站,我们到菜鸟驿站取件时扫描二维码取件,如果哪天我们碰到一个有趣的人,可能还会微信扫描二维码加个好友,如果你阅读我们的文章感觉对自己有一点帮助,还可以扫描文末二维码关注一下我们的公众号。
用 Python 来了解一下《安家》
如果要选一部近期最火的电视剧,一定非《安家》莫属,你可能没有具体看过,但如果你看微博的话一定听过这个名字,这部电视剧多次登上微博热搜榜,好像还有几次冲上了热搜榜首,该剧主要讲述的是关于房产中介卖房的故事,电视剧原名也是叫卖房子的人。
用 Python 抓取公号文章保存成 HTML
上次为大家介绍了如果用 Python 抓取公号文章并保存成 PDF 文件存储到本地。但用这种方式下载的 PDF 只有文字没有图片,所以只适用于没有图片或图片不重要的公众号,那如果我想要图片和文字下载下来怎么办?今天就给大家介绍另一种方案——HTML。
Python 图表利器 pyecharts
随着互联网的高速发展,数据量也在疯狂增长,近几年数据分析,数据挖掘的岗位越来越吃香。说到数据分析,就离不开数据的可视化,毕竟图表比冷冰冰的数字直观,一眼就可以看出趋势和结论,毕竟一图胜千言。
而 Python 作为数据分析的主力语言,自然也有不少可视化的类库,比如 matplotlib,常用的柱状图、散点图、折线图都可以生成。但如果想在网页端展示的话就显得有些捉襟见肘了。