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
相关产品推荐
相关产品推荐

