Python办公自动化统计实例--毕业照编号统计

实例描述

一年一度毕业季,除开离别的不舍和四年大学时光的回忆,伴随而来的还有作为班委的无穷无尽的任务,班级里面各个同学的毕业照的套餐统计就是一项。

毕业照的套餐有四个,我们班一共拍了八张集体照,电子版的全发给同学们,不过照片塑装打印的服务需要收费,一共有四个套餐供大家选择,每个套餐对应相应的需要从八张照片中选择的张数。

|------|-----|-----|-----|-----|
| 套餐 | 套餐一 | 套餐二 | 套餐三 | 套餐五 |
| 数量/张 | 2 | 3 | 4 | 5 |

每张照片都会对应唯一的编号供每位同学确认挑选,如下图。

起初的解决思路就是直接用共享文档让大家填写就行,不过最后得到的结果是这样。。

图片编号那一列真的是不堪入目,有填写完整编号的,有只填写后三位数字的,且分隔符有使用'、',也有使用','的,任务的目标是以班级为单位将每个编号的照片汇总数量上报给摄影楼进行塑装,使用Excel的筛选功能还是需要人工进行最后的统计,显得繁琐。

脚本解决思路设计

可以使用python的pandas模块对这些信息进行统计。

首先把共享文档的内容导出为本地的Excel文件格式,同时把表格内容中的','统一替换成'、',方便后续的字符串分割;

首先是对文件的读取,这是直接使用pandas模块进行读取;

python 复制代码
import pandas as pd

file_path = r'D:\py-code\company\6_14_class\毕业照图片编号.xlsx'
data = pd.read_excel(file_path,keep_default_na=False)
photo_id_list = data['图片编号'] 

keep_default_na=False是表示读取的时候跳过存在空值的行,photo_id_list = data['图片编号'] 是读取'图片编号'作为表头的列的信息,返回的是列表结构;

接下来需要考虑的是解决图标编号标准不一的问题,这里是构建映射表,通过哈希表的结果实现,统一把所有的编号映射成完整的图片序号;

python 复制代码
true_list = ['519A0349','519A0351','519A0358','519A0416','519A0421','519A0424','519A0430','519A0437']
id_dict = {'349':'519A0349','351':'519A0351','358':'519A0358','416':'519A0416','421':'519A0421','424':'519A0424','430':'519A0430','437':'519A0437'}

true_list是所有八张图片的编号,防止同学在填写的时候出现错误(在检查过程中发现有两位同学的编号出现了错误,damn!)

python 复制代码
for single_id in photo_id_list: # 读取编号列的每一行的信息
    if single_id != '': # 跳过空值
        photo_id = single_id.split('、') # 以'、'作为分隔符号分隔获得多编号的信息
        if photo_id[0] in id_dict.keys(): # 检查是否是编码在后三位的简写
            photo_id_new = photo_id  # 复制原编码
            photo_id = [] # 清空原编码,准备下面的重新赋值
            for photo_id_single in photo_id_new:
                photo_id.append(id_dict[photo_id_single])  # 通过映射表复制新编码

图片的统计也是通过字典的方法进行最终的统计,主键是图片的编号,值是该图片对应的汇总张数;

python 复制代码
from collections import defaultdict

count_photo_id = defaultdict(int)
count_combine = defaultdict(int)


# 以下是伪代码

        for photo_id_single in photo_id:
            if photo_id_single not in true_list:  # 检查编号是否错误
                print('wrong id:',photo_id_single)
                # raise KeyError('something woring')

            else:
                count_photo_id[photo_id_single] +=1  # 图片编号作为主键的值加一
                n+=1 # 统计总的图片张数

对于套餐的统计使用count_combine字典完成,具体的方法与count_photo_id的统计相同,这里就不赘述了。

代码

python 复制代码
import pandas as pd
from collections import defaultdict

true_list = ['519A0349','519A0351','519A0358','519A0416','519A0421','519A0424','519A0430','519A0437']
id_dict = {'349':'519A0349','351':'519A0351','358':'519A0358','416':'519A0416','421':'519A0421','424':'519A0424','430':'519A0430','437':'519A0437'}

file_path = r'D:\py-code\company\6_14_class\毕业照图片编号.xlsx'

data = pd.read_excel(file_path,keep_default_na=False)

count_photo_id = defaultdict(int)
count_combine = defaultdict(int)

# data.fillna(0)
photo_id_list = data['图片编号'] 
n=0
for single_id in photo_id_list:
    if single_id != '':
        photo_id = single_id.split('、')
        if photo_id[0] in id_dict.keys():
            photo_id_new = photo_id
            photo_id = []
            for photo_id_single in photo_id_new:
                photo_id.append(id_dict[photo_id_single])
        # print(photo_id)

        # chenk
        for photo_id_single in photo_id:
            if photo_id_single not in true_list:
                print('wrong id:',photo_id_single)
                # raise KeyError('something woring')

            else:
                count_photo_id[photo_id_single] +=1
                n+=1

print('\n')	
print("图片统计:\n", count_photo_id)
print('all number:',n)

combine_infor = data['套餐']
for combine in combine_infor:
    if combine != "":
        count_combine[combine] += 1

print('\n')
print('套餐统计:', count_combine)

最后得到的结果:

ok,完成统计。

总结

好吧我承认上面的脚本其实都可以通过Excel的功能完成,但对于大学生活最后的几项任务,我还是想增加一些技术含量,以致敬即将结束的校园生活。

毕业快乐~


相关推荐
社交怪人21 分钟前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生1 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS1 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣1 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100861 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
彦为君2 小时前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡2 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
时空自由民.2 小时前
vim入门配置教程
编辑器·vim·excel
PILIPALAPENG2 小时前
Python 语法速成指南:前端开发者视角(JS 类比版)
前端·人工智能·python