如何永久修改文本文件中的值?Python文件操作问题
问题描述
本人刚接触文件操作,存在如下技术问题:现有一段Python代码,当选择选项2时仅打印出涨薪后的员工薪资,但未将修改后的数据写入empList.txt文件,导致选择选项1查看时仍显示原始薪资,请问如何修改代码实现薪资修改的永久保存?
原代码
#pretend this is a text file, do not modify this part of the code..... emps='''20120001;Tortor;Griffin;Manager;Admin;1000;5000 20120002;Sebastian;Jest;Assist. Manager;Admin;750;3000''' f = open('empList.txt','w') f.write(emps) f.close() #Code here employees = [] while True: print('''1 - 查看员工信息 2 - 给员工涨薪 X - 退出 ''') choice = input('请输入你的选择: ') print() if choice =='2': with open('empList.txt', 'r') as f: employees = f.read().splitlines() for employee in employees: emp_num, last, first, position, dept, salary, allowance = employee.split(';') if position == 'Manager': print(f'{emp_num} {last} {first} {float(salary)*2} {dept} {allowance} {position}') else: print(f'{emp_num} {last} {first} {float(salary)*1.5} {dept} {allowance} {position}') print() elif choice =='1': with open('empList.txt', 'r') as f: employees = f.read().splitlines() for employee in employees: emp_num, last, first, position, dept, salary, allowance = employee.split(';') print(f'{emp_num} {last} {first} {float(salary)} {dept} {allowance} {position}') print() elif choice =='X': break
问题复现示例
1 - 查看员工信息 2 - 给员工涨薪 X - 退出 请输入你的选择: 2 20120001 Tortor Griffin 2000.0 Admin 5000 Manager 20120002 Sebastian Jest 1125.0 Admin 3000 Assist. Manager 1 - 查看员工信息 2 - 给员工涨薪 X - 退出 请输入你的选择: 1 20120001 Tortor Griffin 1000.0 Admin 5000 Manager <--- 数值没改成2000.0? 20120002 Sebastian Jest 750.0 Admin 3000 Assist. Manager <--- 数值没改成1125.0? 1 - 查看员工信息 2 - 给员工涨薪 X - 退出
解决方案
问题根源是选项2的逻辑只计算并打印了涨薪后的薪资,没有将修改后的数据写回empList.txt文件。要实现永久保存,需要在处理完每个员工的薪资后,生成修改后的行数据,再覆盖写入原文件。
修改后的完整代码
#pretend this is a text file, do not modify this part of the code..... emps='''20120001;Tortor;Griffin;Manager;Admin;1000;5000 20120002;Sebastian;Jest;Assist. Manager;Admin;750;3000''' f = open('empList.txt','w') f.write(emps) f.close() #Code here employees = [] while True: print('''1 - 查看员工信息 2 - 给员工涨薪 X - 退出 ''') choice = input('请输入你的选择: ') print() if choice =='2': modified_employees = [] with open('empList.txt', 'r') as f: employees = f.read().splitlines() for employee in employees: emp_num, last, first, position, dept, salary, allowance = employee.split(';') # 计算新薪资 if position == 'Manager': new_salary = float(salary) * 2 else: new_salary = float(salary) * 1.5 # 打印涨薪后的信息 print(f'{emp_num} {last} {first} {new_salary} {dept} {allowance} {position}') # 将修改后的数据重新拼接成原格式的字符串,加入新列表 modified_line = f'{emp_num};{last};{first};{position};{dept};{new_salary};{allowance}' modified_employees.append(modified_line) # 将修改后的数据写入文件,覆盖原内容 with open('empList.txt', 'w') as f: f.write('\n'.join(modified_employees)) print() elif choice =='1': with open('empList.txt', 'r') as f: employees = f.read().splitlines() for employee in employees: emp_num, last, first, position, dept, salary, allowance = employee.split(';') print(f'{emp_num} {last} {first} {float(salary)} {dept} {allowance} {position}') print() elif choice =='X': break
关键修改点说明
- 新增
modified_employees列表,用于存储修改后的员工数据行 - 计算新薪资后,将所有字段重新拼接成原文件的分号分隔格式字符串,添加到
modified_employees - 遍历处理完所有员工后,使用
with open('empList.txt', 'w')打开文件,将modified_employees中的内容用换行符连接后写入,覆盖原文件内容
这样操作后,选择选项2涨薪时,修改的数据会永久保存到文件中,再次选择选项1查看时就能看到更新后的薪资了。
内容的提问来源于stack exchange,提问作者Griffin De Leon
相关产品推荐
相关产品推荐

