唠唠python(7) -- 包

这是我们打基础的最后一节。下一节,我们就来兑现之前许下的承诺,用脚本来实现表格的自动处理。

这里所说的包就是《你的背包》的包,是对背包概念的一种模拟。

这两天小郭去武汉玩,为了途中更方便一点,我就把我的背包给她用了(其实是我一直在用她的背包😁)。我担心公司有一些事务要处理,所以一直都保持着背笔记本回家的习惯。最近几天都是手拿笔记本,十分的不方便。

所以你看,包还是很重要的。

我们一般会把一些平时经常用到的物品放到书包,如果我们有多个包,则会把同类物品放到同个包。比如我们把纸笔放进背包里,只要背着这个背包出去,就可以在需要的时候写字了,而且背在肩上很方便。

python里的包也是类似的用途。

python中的包

互联网的兴起,让全球的人都可以有机会合作,大大提高了人们的工作效率。

实际上,python中的包还有另外一个异常重要的作用:复用。比如,我们之前说的表格处理的例子,世界上有很大一部分人都会用到表格处理的功能,如果大家每人做一套工具来操作表格(比如读取或写入表格中的某个单元格),成本很高,不利于人类知识的叠加。有句话叫站在巨人的肩膀上,说得很有道理。

那怎么做呢?

把我们的功能合集打个包,而且只把人们要用的东西提供出来。举个例子,我们要读取某个单元格的数据(比如我们要读取B5单元格的数据),只需要sheet["B5"].value就可以了,具体怎么获取的,交给那个精通表格文件处理的人就可以了,我们不需要理会。

背包很好理解,但python中的包听起来就有点玄乎了。python中的包到底是什么东西呢?或者说,它的外在表现是什么呢?

我们之前把洗衣服的操作封装成一台洗衣机,叫做功能。又把人的说学逗唱的功能和人的姓名等属性封装成一个人类的概念,叫做类。包其实就是一个功能和类的合集,也就是说,它里面既包含有功能,又包含有类。说白了,其实就是把我们之前所有的代码放到一块。

使用包

之前我们讨论类的时候,自己亲自写了一个类来更深入的体会类的概念。

现在我们使用包,再来亲自手写一个包?

这次我们不写了,我们之前谈到封装,其实就是把细节隐藏起来,而让一个东西更好用。比如一台洗衣机,我们只需要学会按按键就可以了。如果我们读了洗衣机的使用说明还不知道洗衣机怎么用,只能说这台洗衣机做得太烂了,或者说交互太差了。

我们直接来使用一个包体验一下:

1
2
import os
print os.name

执行上面两条命令后,会显示当前系统的名称。如在mac下,会显示”posix”。它是怎么获取的,我们并不关心,只要返回的名称正确,我们就认为,嗯,小伙子干得不错。

import意思是使用,我们请求使用os包,并要求显示我们os的name。

读取表格文件

我们已经来到了这里:读取表格文件。

只要能用语言精确表达出来的功能,大部分都很简单,而且非常有可能已被其他人实现了。表格处理就是这样。

现在有一个问题,既然这个包有可能已经被实现了,那我们怎么获取这个包呢?

我们知道肯定不止一个包可以做这种操作。一般我们会在网上搜索大量资料,然后对比选取符合我们需求的包。

假设我们已经阅读并对比了大量资料,发现了一个可以读写表格文件的库,叫做openpyxl

现在我们要准备安装这个包了。这是一个最好的时代,只要确定了使用哪个包,安装极其简单,我们甚至都不用关心去哪里下载,下载完成后要做什么,它会不会依赖其它的包,等等等等这些问题。python已为我们准备好了安装的方式。

1
$ pip install openpyxl

是的,就是这么一条简单的命令。然后稍许的等待,这个包就安装成功了。真的方便极了,美好的东西总能让我们心情愉快。我们甚至也不用关心它被安装到了哪,直接用就可以了。

想想如果我们用表格处理软件查看B5单元格的数据。先打开目标表格文件,然后翻到第一张表格(一个表格文件对应一个工作簿,里面可能有多张表格),找到B5单元格,并查看内容。

1
2
3
4
5
6
import openpyxl

workbook = openpyxl.load_workbook('a.xlsx')
sheet = workbook.active

print sheet["B5"].value

就这么简单的几行,就把B5单元格的内容显示出来了。

结语

现在我们已经可以获取表格中的某个单元格了,写入跟获取是同样简单的。下一篇我们来看如何写入,以及如何来实现我们之前的物料取整问题。

终于可以不用对着成百上千的数据心力交瘁,提心吊胆了。可以有更多时间喝咖啡了。想想好激动。

碎碎念

晚上9点30,写完了,可以去吃饭了,哈哈。

老板来一个煎饼果子,一盒水果,一个鸡腿。街边小吃让人愉悦。

想起申总的一句话:不吃街边小吃的人,不知道要丧失多少乐趣。