Python运行报错AttributeError: 'list' object has no attribute 'write'求助
错误原因
- 你定义的
g是存储替换后每行内容的列表,只有文件对象才有write()方法,对列表调用该方法自然会触发属性不存在的报错。 - 原有遍历逻辑存在问题:循环内仅尝试对列表执行错误的写入操作,仅在循环结束后打印最后一行内容,无法实现全量逐行输出的需求,且额外加
\n会导致换行重复。
修复方案
方案1:仅控制台逐行输出(格式和原文件一致)
直接遍历替换后的行列表打印即可,注意关闭print默认的自动换行,避免空行翻倍:
def modifytext2(): # 使用with上下文管理器自动处理文件关闭,避免资源泄漏 with open('data_user.txt', 'r', encoding='utf-8') as file1: f = file1.readlines() g = [i.replace('@','---') for i in f] for line in g: # 原行已自带换行符,print指定end=''取消默认追加的换行 print(line, end='') modifytext2()
方案2:同时写入新文件+控制台逐行输出
如果需要持久化保存修改后的内容,需要额外打开可写模式的文件对象执行写入操作:
def modifytext2(): # 读取原文件内容 with open('data_user.txt', 'r', encoding='utf-8') as read_f: lines = read_f.readlines() modified_lines = [line.replace('@', '---') for line in lines] # 写入新文件+控制台输出 with open('modified_data_user.txt', 'w', encoding='utf-8') as write_f: for line in modified_lines: write_f.write(line) print(line, end='') modifytext2()
输出效果
运行后输出内容与原文件格式完全一致,仅@替换为---:
name : aldo email : alfo---gmail name : gume email : gume---mail name : noname email : noname---mail
内容的提问来源于stack exchange,提问作者golead rich
相关产品推荐
相关产品推荐

