如何在文件中比较日期,筛选1995年后人员并扣减10%薪资?
问题
现有CSV格式的员工数据(示例5条):
A1234567, Amen, Mr, 18/01/1999, Construction, Head, 987654321, FullTime, 5000 A2345678, Bmen, Mr, 23/04/1994, Office, Worker, 987654321, FullTime, 3000 A3456789, Cwomen, Mrs, 13/01/1996, Aviation, Pilot, 987654321, FullTime, 4000 A4567890, Dmen, Mr, 18/01/2002, Construction, Assistant Head, 987654321, FullTime, 4500 A5678901, Ewomen, Ms, 18/01/1991, Construction, Worker, 987654321, FullTime, 2500
需求:筛选出1995年之后出生的员工,将其薪资(最后一列)扣减10%;1995年及之前出生的员工薪资保持不变。
现有代码存在日期比较错误,代码片段如下:
with open('list.txt') as file: for line in file: split = line.split(",") if split[3] < 1/1/1995:
期望输出结果:
A1234567, Amen, Mr, 18/01/1999, Construction, Head, 987654321, FullTime, 4500 A2345678, Bmen, Mr, 23/04/1994, Office, Worker, 987654321, FullTime, 3000 A3456789, Cwomen, Mrs, 13/01/1996, Aviation, Pilot, 987654321, FullTime, 3600 A4567890, Dmen, Mr, 18/01/2002, Construction, Assistant Head, 987654321, FullTime, 4050 A5678901, Ewomen, Ms, 18/01/1991, Construction, Worker, 987654321, FullTime, 2500
修正后的代码与说明
核心错误是直接用字符串和数值做日期比较,必须先把日期字符串转换成可比较的日期对象。以下是完整实现代码:
from datetime import datetime # 定义基准日期:1995年1月1日 cutoff_date = datetime(1995, 1, 1) with open('list.txt', 'r') as infile, open('output.txt', 'w') as outfile: for line in infile: # 去除换行符并分割字段,同时处理可能的前后空格 fields = [field.strip() for field in line.strip().split(',')] # 提取日期字符串并转换为datetime对象 birth_date_str = fields[3] birth_date = datetime.strptime(birth_date_str, '%d/%m/%Y') # 判断是否是1995年之后出生的员工 if birth_date > cutoff_date: # 薪资扣减10%,转换为整数 salary = int(fields[-1]) new_salary = int(salary * 0.9) fields[-1] = str(new_salary) # 将处理后的字段拼接成一行,写入输出文件 output_line = ', '.join(fields) outfile.write(output_line + '\n')
关键说明:
- 日期处理:使用
datetime.strptime将dd/mm/YYYY格式的字符串转为datetime对象,才能和基准日期cutoff_date做正确的比较。 - 薪资计算:将最后一列的薪资字符串转为整数,扣减10%后再转回字符串,确保格式一致。
- 文件操作:同时打开输入文件和输出文件,处理一行写入一行,避免占用过多内存。
- 字段清洗:用
strip()处理每个字段的前后空格,避免因数据格式不规范导致的错误。
内容的提问来源于stack exchange,提问作者user19223797
相关产品推荐
相关产品推荐

