ExcelOperator类其实,按照正常逻辑来讲,这个类的创建不应该放在前面讲,大家姑且把它看作是一个番外篇^-^,一个利用openpyxl处理Excel的知识点汇总。
就当是学习知识点对于如何使用,先不管它,等我们介绍完全部的函数功能后,它的作用就显而易见了……
奉上链接供大家回顾
今天,我们主要来了解下通讯录小程序的信息总览和单个信息检索功能的实现。
单个信息检索功能是删、改、查的前提,在对单个数据进行操作时,我们首先要找到该数据。废话不多说,我们来看下今天要实现的效果。
今天要实现的效果回顾前面两篇内容,我们今天主要实现control==1和control==2时的两个函数功能。
即:要实现view_infos()和find_person()两个函数。我们直接在之前定义的函数框架中添加即可。
函数功能实现下面我们逐一进行分析。
信息总览功能的实现
其实很简单,就是使用openpyxl库打开我们的'phonenumber.xlsx'(名字自己取),然后使用prettytable库将我们的Excel文件展示出来即可。
我们来完成它吧。
首先,把我们上一篇中定义的ExcelOperator类保存为'exceloperator.py'的文件,存储在main.py的同一目录下。
然后,我们定义一个ExcelOperator类的实例,当然,这之前,还是得把库导入进去
import sys
from exceloperator import ExcelOperator as eor
from prettytable import PrettyTable
# 创建实例
eo = eor('phonenumber.xlsx')
# 再创建一个PrettyTable对象的实例
pt = PrettyTable()
# 想prettytable实例中添加第一行内容
pt.field_names = eo.get_row_value(1)
# 获取最大行、列数
row, col = eo.get_row_col_num()
# 遍历每一行(当然要除了标题行)
for i in range(2, row):
pt.add_row(eo.get_row_value(i)) # 将每一行内容添加到pt实例中
# 打印输出
print(pt)
ok了,把上面这些放到函数view_infos()中即可,注意缩进哦
暂时完成了检索个人信息功能的实现
从程序分析中我们可以看到,我们首先提示用户输入要查找的人名。然后,在从Excel中人名那一列找这个名字,如果有,则返回信息,如果没有,则返回None。按照这样的思路很容易将函数写出来。
# 提示用户输入要查找的人名
person_name = str(input('请输入要查找(或编辑)的人员姓名(回车结束输入):'))
# 从哪里找人名呢?我们先得有数据!(这个模块我们不再重复导入了)
eo = eor('phonenumber.xlsx')
name_list = eo.get_col_value(2) # 这里我的人名刚好是Excel表格的第二列,直接取出即可
# 判断是否找到了?
if person_name in name_list:
# 找到了
print('恭喜,找到了,信息如下:')
# PrettyTable实例展示它
pt = PrettyTable()
pt.field_names = eo.get_row_value(1)
row, col = eo.get_row_col_num()
result = eo.get_row_value(name_list.index(person_name) + 1)
pt.add_row(result)
print(pt.get_string())
# 返回行数据及它在列表中的索引位置
return result, name_list.index(person_name) + 1
else:
print('很遗憾,没找打这个人!')
return None
好了,功能大致实现了,但是我们仔细考虑下到底实现得怎么样?
功能实现了真的实现功能了吗
如果我们像上面这样写,那封装ExcelOperator类就完全没有必要了。对比下代码。
分析代码上面信息总览和查找个人信息,其实是两个不同的对象实例。后续增加修改信息的功能后,没办法做到实时显示信息(当然也有办法,但是增加了代码量^-^)。
大家想一想是不是这样所以,我们在定义函数时,直接将ExcelOperator对象实例传进去,这样就能确保我们使用的是同一个对象实例。我们将两个函数做一修改。
实现代码这样,我们既实现了功能,又保证了两者展示的是同一对象实例(当然,要配上上面的main()函数)
好了,今天的内容就到这里了。其实这个例子中PrettyTable使用过于繁琐,还有精简的空间,留给大家思考下。
还有空间下一篇内容我们来实现数据的增、删、改操作。喜欢的小伙伴关注我,这个练手项目很有意思。
本篇系作者原创,转载请注明出处,百家号:Python高手养成