You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何永久修改文本文件中的值?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:35:16