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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:57:00