Python实例题:Python自动化开发-考勤处理
目录
Python实例题
题目
实现思路
代码实现
代码解释
运行思路
注意事项
Python实例题
题目
Python自动化开发-考勤处理
实现思路
- 读取考勤记录文件:使用
pandas
库读取 CSV 格式的考勤记录文件。 - 数据预处理:对读取的数据进行清洗和转换,例如将打卡时间转换为合适的时间格式。
- 考勤规则设定:根据公司的考勤规则,如上班时间、下班时间、迟到判定标准等,判断员工是否迟到、早退等。
- 统计考勤结果:统计每个员工的出勤天数、迟到次数、早退次数等信息。
- 生成考勤报表:将统计结果保存为 CSV 文件或其他格式的报表。
代码实现
import pandas as pd
from datetime import datetime# 定义上班时间和下班时间
START_TIME = datetime.strptime('09:00:00', '%H:%M:%S').time()
END_TIME = datetime.strptime('18:00:00', '%H:%M:%S').time()def read_attendance_data(file_path):"""读取考勤记录文件:param file_path: 考勤记录文件的路径:return: 包含考勤记录的 DataFrame"""try:df = pd.read_csv(file_path)return dfexcept FileNotFoundError:print(f"文件 {file_path} 未找到。")return Nonedef preprocess_data(df):"""数据预处理,将打卡时间转换为时间格式:param df: 包含考勤记录的 DataFrame:return: 处理后的 DataFrame"""df['打卡时间'] = pd.to_datetime(df['打卡时间']).dt.timereturn dfdef check_attendance(row):"""检查员工的考勤情况:param row: 包含员工考勤记录的 DataFrame 行:return: 考勤结果(迟到、早退、正常等)"""punch_time = row['打卡时间']if punch_time > START_TIME:return '迟到'elif punch_time < END_TIME:return '早退'return '正常'def process_attendance(df):"""处理考勤数据,统计每个员工的考勤结果:param df: 包含考勤记录的 DataFrame:return: 包含考勤统计结果的 DataFrame"""df['考勤结果'] = df.apply(check_attendance, axis=1)attendance_summary = df.groupby('员工姓名')['考勤结果'].value_counts().unstack(fill_value=0)attendance_summary['出勤天数'] = attendance_summary.sum(axis=1)return attendance_summarydef generate_report(attendance_summary, report_path):"""生成考勤报表并保存为 CSV 文件:param attendance_summary: 包含考勤统计结果的 DataFrame:param report_path: 考勤报表的保存路径"""attendance_summary.to_csv(report_path)print(f"考勤报表已保存到 {report_path}。")if __name__ == "__main__":file_path = 'attendance_records.csv' # 替换为实际的考勤记录文件路径report_path = 'attendance_report.csv' # 替换为实际的考勤报表保存路径# 读取考勤记录attendance_data = read_attendance_data(file_path)if attendance_data is not None:# 数据预处理attendance_data = preprocess_data(attendance_data)# 处理考勤数据attendance_summary = process_attendance(attendance_data)# 生成考勤报表generate_report(attendance_summary, report_path)
代码解释
- 读取考勤记录文件:
read_attendance_data
函数使用pandas
的read_csv
方法读取 CSV 文件,如果文件不存在则输出错误信息。 - 数据预处理:
preprocess_data
函数将打卡时间
列转换为时间格式,方便后续的比较和处理。 - 考勤规则设定:
check_attendance
函数根据上班时间和下班时间判断员工的考勤情况,返回迟到
、早退
或正常
。 - 统计考勤结果:
process_attendance
函数使用apply
方法对每一行数据应用check_attendance
函数,然后使用groupby
和value_counts
方法统计每个员工的考勤结果,最后计算出勤天数。 - 生成考勤报表:
generate_report
函数将考勤统计结果保存为 CSV 文件。
运行思路
- 安装依赖库:确保已经安装了
pandas
库,可以使用pip install pandas
进行安装。 - 准备考勤记录文件:将考勤记录保存为 CSV 文件,文件中应包含
员工姓名
和打卡时间
两列。 - 运行脚本:将代码中的
file_path
和report_path
替换为实际的文件路径,然后在终端中运行python attendance_processing.py
。 - 查看考勤报表:脚本运行完成后,会在指定的路径下生成考勤报表文件。
注意事项
- 文件格式:确保考勤记录文件为 CSV 格式,并且包含
员工姓名
和打卡时间
两列。 - 时间格式:代码中假设
打卡时间
列的格式为HH:MM:SS
,如果实际格式不同,需要相应地修改代码。 - 考勤规则:代码中的上班时间和下班时间是固定的,可以根据实际情况进行调整。同时,考勤规则可以根据公司的具体要求进行扩展,例如考虑午休时间、请假情况等。