python基础学习(一),操作Excel文件,处理数据
基础认知(办公自动化场景)
目标:熟悉变量、条件、循环、函数,摆脱“手工作业”。
场景:公司HR需要从一份混乱的Excel考勤表中,自动筛选出迟到超过3次的员工名单。
具体例子:读取CSV文件,遍历行,统计迟到次数,输出预警名单。
练习:写一个函数 count_late(records),输入列表,返回字典。
基本涉及模块:
1)使用import 进行插件引用(如果是内置插件,可以直接引用;如果是三方插件,则需要pip install 安装后,再进行引用;)
2)定义子函数,根据业务功能需求,定义具体的实现子函数;比如当前项目,可以单独定义一个获取csv文件的函数
3)主函数main();整个py文件的执行主体;定义整个业务流程;
4)定义py文件的标准入口:
if __name__ == "__main__":
main()
5)终端中,使用python late_warning.py , 即可实现需要的业务功能;
以下是具体代码,可以直接使用;
具体实现代码:late_warning.py
1 import csv #引用插件 2 3 def em_latecount(myrecords): 4 """ 统计员工列表中,每个员工的迟到次数 5 参数:myrecords 属于一个列表数组,每个元素是一个JSON对象,包含姓名和是否迟到信息 6 7 返回数据:JSON数组,里面有姓名和迟到次数 8 """ 9 latecount = {} 10 for record in myrecords: 11 name = record["员工姓名"] 12 is_late = record["是否迟到"] 13 if is_late == "是": 14 if name in latecount: 15 latecount[name] +=1 16 else: 17 latecount[name] = 1 18 19 return latecount 20 21 def read_csv(file): 22 """ 读取Excel文件,获取员工迟到记录数据表格 23 24 参数:csv文件的路径 25 26 返回:作为一个list,返回; 27 """ 28 records = [] 29 with open(file,"r",encoding="utf-8") as ff: 30 reader = csv.DictReader(ff) 31 for row in reader: 32 records.append(row) 33 return records 34 35 def search_warning_list(latecount,threshold=4): 36 """查找列表中,迟到次数超过4次的员工 37 参数:需要查找的对象列表,及设置的迟到次数的阈值 38 返回:迟到4次以上的员工列表 39 """ 40 41 warning_record = [] 42 for name, count in latecount.items(): 43 if count > threshold: 44 warning_record.append({"name":name,"count":count}) 45 return warning_record 46 47 def main(): 48 import os 49 filepath= os.path.dirname(os.path.abspath(__file__)) 50 print(f"获取csv数据路径:{filepath}") 51 csvpath = os.path.join(filepath,"attendance.csv") 52 53 print(f"获取csv数据:{csvpath}") 54 records = read_csv(csvpath) 55 print(f"获取了{len(records)}条记录\n") 56 57 print("开始统计员工的迟到次数") 58 late_count = em_latecount(records) 59 60 print("打印员工迟到次数记录") 61 for name,count in late_count.items(): 62 print(f"name:{name}, count:{count}") 63 64 print("获取达到阈值的员工") 65 warning_record = search_warning_list(late_count,4) 66 67 print("打印警告列表") 68 if warning_record: 69 for aa in warning_record: 70 print(f"name:{aa['name']},count:{aa['count']}") 71 else: 72 print("所有员工都未超出4次") 73 74 if __name__ == "__main__": 75 main()
测试使用附件:https://files.cnblogs.com/files/violetlength/attendance.zip?t=1787886060&download=true
浙公网安备 33010602011771号