day8·函数封装

函数封装也是程序最小的封装单位,对于一些操作可以封装在函数里面,如果要用到同样的操作用该函数即可,这实现了代码的可复用性。函数封装过小和过大都不合适。我自己的做法通常一个函数只实现一个功能函数体包括多个步骤;如读取和写入文件。封装成两个函数、一个读取、一个写入。

读取包括:

1.打开工作簿

2.获取sheet

3.读取值

4.关闭

写入包括:

1.打开工作簿

2.获取sheet

3.写入值

4.保存工作簿

# 比如需求:读取D盘的test1.excel ,test2.excel文件内容,并以[{表头:值}......]形式返回
# 借用第三方库openpyxl,第一步:加载工作簿; 第二步:加载sheet; 第三步:取值打包;第四步关闭工作簿
import openpyxl

# ---------------- 方式一:无任何封装的情况-----------
path1 = r"d:/text1.xlsx"
path2 = r"d:/text2.xlsx"
sheet = "Sheet1"
wb1 = openpyxl.load_workbook(path1)
wb2 = openpyxl.load_workbook(path1)
sh1 = wb1[sheet]
sh2 = wb1[sheet]
#    获取最大列
max_column1 = sh1.max_column
max_column2 = sh2.max_column
header_list1 = []
header_list2 = []
list1 = []
list2 = []
for i in range(1, max_column1 + 1):
    header_list1.append(sh1.cell(1, i).value)
#     获取全部sheet全部值
for i in sh1.values:
    dict_value1 = dict(zip(header_list1, i))
    list1.append(dict_value1)
# 关闭文件
wb1.close()

for i in range(1, max_column2 + 1):
    header_list2.append(sh1.cell(1, i).value)
#     获取全部sheet全部值
for i in sh2.values:
    dict_value2 = dict(zip(header_list2, i))
    list2.append(dict_value2)
# 打印
print(list1[1:], list2[1:])
# 关闭文件
wb1.close()
wb2.close()


# ----------方式二:封装函数的情况下-------------
# 思路:从上面可以看出因为path的不同会导致整个步骤都在重复编写,实际情况sheet也可能不一样,所以抽取可能会变得path和sheet作为函数的形参
def read_test1(path, sheet):
    wb = openpyxl.load_workbook(path)
    sh = wb[sheet]
    #     获取最大列
    max_column = sh.max_column
    header_list = []
    list1 = []
    for i in range(1, max_column + 1):
        header_list.append(sh.cell(1, i).value)
    #     获取全部sheet全部值
    for i in sh.values:
        dict_value = dict(zip(header_list, i))
        list1.append(dict_value)
    # 关闭文件
    wb.close()
    return list1[1:]


# 调用
list1 = read_test1(r"D:/text1.xlsx", "Sheet1")
list2 = read_test1(r"D:/text2.xlsx", "Sheet1")


# 方式二对比方式一减少了很多的代码量看上去比较简洁,复用性也较高


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值