>>> from env_helper import info; info()
页面更新时间: 2024-04-06 23:08:19
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.7. 案例:生成统计表

大部分情况下,电子表格都是用来存储格式化的数据。 作为数据存储的容器,注意对 XLSX 进行一些约束,如数据类型、数据的完整性。 这些约束如果应用到数据库上可能更加明显,但是电子表格的使用场景可能更加常见。

1.7.1. 场景说明

读取txt文本文件内的人员信息清单,获取个人信息,并分类别统计各类项目,最后将人员信息清单存储到xlsx表中。

1.7.2. 解决思路

先熟悉txt文件中的信息清单格式,逐行读取文本内容,根据姓名、年龄、部门、性别分别存储到字典变量中, 并且当读取到每个人的最后一项信息条时将字典存储到列表里, 全部添加完之后读取列表变量的值,按照分类来逐行添加到xlsx表中。

1.7.3. 解决方法

使用 with 语句打开txt文件,逐行读取文本信息,判断信息开头信息属于姓名、年龄、部门、性别哪个分类, 并将截取到的字符串添加到字典变量 list1 中。 当读取到最后每个人一行信息的时候,也就是‘性别’,将 list1 添加到列表 dist 中,并且清空字典 list1

>>> list1={}
>>> dist=[]
>>> with open('name.txt', 'r') as f:
>>>     for line in f:
>>>         if '姓名'in line:
>>>             list1['姓名']=line[3:-1]
>>>         if '年龄'in line:
>>>             list1['年龄']=line[3:-1]
>>>         if '部门'in line:
>>>             list1['部门']=line[3:-1]
>>>         if '性别'in line:
>>>             list1['性别']=line[3:-1]
>>>             dist.append(list1)
>>>             list1={}
>>> dist
[{'姓名': 'Herry', '年龄': '23', '部门': '销售', '性别': '女'},
 {'姓名': 'Merry', '年龄': '43', '部门': '销售', '性别': '男'},
 {'姓名': 'Nancy', '年龄': '29', '部门': '产品计划', '性别': '女'},
 {'姓名': 'Fin', '年龄': '42', '部门': '市场开发', '性别': '女'},
 {'姓名': 'Max', '年龄': '29', '部门': '人事', '性别': '女'},
 {'姓名': 'Tom', '年龄': '50', '部门': '行政', '性别': '男'},
 {'姓名': 'Jerry', '年龄': '33', '部门': '人事', '性别': '女'}]

OpenpyXL 模块的 Workbook 方法打开统计.xlsx文件, 新建工作表 Data4,按照类姓名、年龄、部门、性别,分别获取列表dist中的人员信息, 并且逐行添加列表 list,新的一行清空 list 内容,统计.xlsx文件保存工作表 Data4的内容。

>>> import openpyxl
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> wb = openpyxl.load_workbook('统计.xlsx')
>>> sheet = wb.create_sheet('Data4', index=0)
>>> head=['姓名', '年龄', '部门','性别']
>>> for x in head:
>>>     list=[]
>>>     list.append(x)
>>>     for i in range(len(dist)):
>>>         list.append(dist[i][x])
>>>     sheet.append(list)
>>> wb.save('统计_result.xlsx')
>>> count_男 = 0
>>> count_女 = 0
>>>
>>> for rec in dist:
>>>     print(rec)
>>>
>>>     if rec['性别'] == '男':
>>>         count_男 = count_男 + 1
>>>     if rec['性别'] == '女':
>>>         count_女 = count_女 + 1
>>>
>>> print(count_男)
>>> print(count_女)
>>>
>>>
{'姓名': 'Herry', '年龄': '23', '部门': '销售', '性别': '女'}
{'姓名': 'Merry', '年龄': '43', '部门': '销售', '性别': '男'}
{'姓名': 'Nancy', '年龄': '29', '部门': '产品计划', '性别': '女'}
{'姓名': 'Fin', '年龄': '42', '部门': '市场开发', '性别': '女'}
{'姓名': 'Max', '年龄': '29', '部门': '人事', '性别': '女'}
{'姓名': 'Tom', '年龄': '50', '部门': '行政', '性别': '男'}
{'姓名': 'Jerry', '年龄': '33', '部门': '人事', '性别': '女'}
2
5
>>> wb = Workbook()
>>> wb = openpyxl.load_workbook('统计_result.xlsx')
>>> sheet = wb.active
>>> sheet.cell(row = 10, column= 1).value = count_男
>>> wb.save('统计_result2.xlsx')

1.7.4. 总结