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

Python替换文件最后一行(第41行)内容的代码修正求助

替换文本文件指定行内容的问题解决

我正在开发一个使用文本文件存储数据的项目,需将用户输入的姓名保存到文件第41行(该行为文件最后一行)。尝试append方法时仅会新增行而非替换原有内容,再次输入姓名会添加新行而非替换目标行。现有代码无法实现需求,请求帮忙修改代码以实现根据输入替换文件第41行内容的功能。

原代码

def addUser(self):
        global name
        global splitname
        name = self.inputBox.text()
        splitname = name.split()
        print("Splitname {}".format(splitname))
        print(len(splitname))
        self.usernameLbl.setText(name)
        self.inputBox.clear()
        # self.congratulations()
        if name != "":
                if len(splitname) == 2:
                        with open('UpdatedCourseInfo.txt', 'r', encoding='utf-8') as f:
                                data1 = f.readlines()
                        data1[40]= [f'\n{splitname[0]}, {splitname[1]}, 0, None, None']
                        with open('UpdatedCourseInfo.txt', 'w', encoding='utf-8') as f:
                                f.writelines()
                        f.close()
                else:
                        with open('UpdatedCourseInfo.txt', 'r', encoding='utf-8') as f:
                                data1 = f.readlines()
                        data1[40]= [f'\n{splitname[0]}, 0, 0, None, None']
                        with open('UpdatedCourseInfo.txt', 'w', encoding='utf-8') as f:
                                f.writelines()
                        f.close()
        print(name)
        return name

修改后的代码

def addUser(self):
        global name
        global splitname
        name = self.inputBox.text()
        splitname = name.split()
        print("Splitname {}".format(splitname))
        print(len(splitname))
        self.usernameLbl.setText(name)
        self.inputBox.clear()
        # self.congratulations()
        if name != "":
                # 读取文件所有行内容
                with open('UpdatedCourseInfo.txt', 'r', encoding='utf-8') as f:
                        data1 = f.readlines()
                
                # 根据姓名格式修改第41行(索引为40)
                if len(splitname) == 2:
                        data1[40] = f'{splitname[0]}, {splitname[1]}, 0, None, None\n'
                else:
                        data1[40] = f'{splitname[0]}, 0, 0, None, None\n'
                
                # 将修改后的内容写回文件
                with open('UpdatedCourseInfo.txt', 'w', encoding='utf-8') as f:
                        f.writelines(data1)
        
        print(name)
        return name

修改说明

  • 修正行赋值错误:原代码把目标行赋值为列表类型,现在直接赋值为字符串,匹配readlines()返回的列表元素格式
  • 补全writelines()参数:必须传入修改后的data1列表,否则不会写入任何内容
  • 移除冗余的f.close():with上下文管理器会自动关闭文件,手动调用属于多余操作
  • 合并重复逻辑:把读取文件的代码抽离出来,避免在两个分支里重复编写,提升代码简洁性

内容的提问来源于stack exchange,提问作者eeeeee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:55:17