Python脚本存储输入到文本文件时旧内容被删除的解决方法
问题产生原因
你代码中原有内容被清空,根源是open('test.txt', 'w')使用的覆盖写入模式:
- 这个模式的默认行为是,只要目标文件存在,打开时就会立刻清空文件内的所有原有内容,文件大小直接归零,后续所有写入操作都会从文件头部开始执行,完全覆盖之前存储的内容。
对应修复方案
只需要把文件打开模式从w替换为a(追加写入模式),就能实现“保留原有内容、新增内容存到文件末尾”的效果:
a模式打开文件时不会触发清空操作,所有新写入的内容会自动接在已有内容的末尾,不会破坏之前存储的历史输入。- 如果想最小改动原有代码,只需要把
open('test.txt', 'w')里的第二个参数从'w'改成'a'即可,修改后的极简版本代码:
name = input('Enter name: ') f = open('test.txt', 'a', encoding='utf-8') f.write(name + '\n') f.close()
更稳妥的推荐写法
用with上下文管理器替代手动调用f.close()的写法,避免写入过程中出现异常时,文件句柄没被正常关闭、内容缓存没写入磁盘的问题:
name = input('Enter name: ') with open('test.txt', 'a', encoding='utf-8') as f: # 给每条输入加换行符,避免多次运行的内容连成一整行,后续查看时难以区分 f.write(f"{name}\n")
相关避坑提示
- 不同打开模式的适用场景要区分清楚:
w模式适合每次运行生成全新文件、不需要保留历史内容的场景;a模式适合持续往同一个文件追加存储历史记录的场景,不要混用。 - 打开文本文件时显式指定
encoding='utf-8',可以避免Windows系统下使用默认GBK编码写入中文时出现乱码的跨平台兼容问题。
内容的提问来源于stack exchange,提问作者Tasdeek Chowdhury
相关产品推荐
相关产品推荐

