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

Python循环写入文件时每次换行失效,仅保留最后一行的问题

解决循环写入文件仅保留最后一行的问题

你的代码核心问题是文件打开模式用错了:每次循环都用'w'(写入模式)打开文件,这个模式会直接清空文件里已有的内容,再写入新数据。循环执行时,每一次写入都会覆盖之前的内容,最后自然只剩最后一行。

方案一:改用追加模式(最直接的修改)

把打开文件的模式从'w'改成'a'(追加模式),这个模式会在文件末尾添加内容,不会清空原有数据;如果文件不存在,还会自动创建,所以原来的os.path.exists判断也可以去掉:

for j in b:
    data = json.loads(json.dumps(j))
    data = json.dumps(data)
    data = json.loads(data)
    from_id = data['from_id']
    text = data['text']
    # 用追加模式写入,自动保留之前的内容
    with open(f'{user_id}.txt', 'a', encoding='utf-8') as file:
        file.write(f'{from_id}: {text}\n')

方案二:一次性写入(效率更高)

如果数据量不大,建议先把所有要写入的内容收集起来,再一次性写入文件,减少文件IO操作:

# 先收集所有行内容
output_lines = []
for j in b:
    data = json.loads(json.dumps(j))
    data = json.dumps(data)
    data = json.loads(data)
    from_id = data['from_id']
    text = data['text']
    output_lines.append(f'{from_id}: {text}')

# 一次性写入所有内容
with open(f'{user_id}.txt', 'w', encoding='utf-8') as file:
    file.write('\n'.join(output_lines) + '\n')

额外优化:去掉冗余的JSON转换

你代码里连续三次的JSON转换(json.loads(json.dumps(j)) → json.dumps(data) → json.loads(data))完全是重复操作,没有实际意义,可以简化成只保留第一次转换(如果是为了深拷贝j的话),或者直接用j:

for j in b:
    # 若不需要深拷贝,直接用j即可:from_id = j['from_id']
    data = json.loads(json.dumps(j))
    from_id = data['from_id']
    text = data['text']
    with open(f'{user_id}.txt', 'a', encoding='utf-8') as file:
        file.write(f'{from_id}: {text}\n')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:04