Python中如何追加文本文件内容不覆盖?是否有专属追加函数?
在Python中向文本文件追加写入新记录的方法
嘿,这个问题其实在Python文件操作里挺基础但关键的,我来给你讲明白~
首先,核心思路是用Python内置的open()函数,指定追加模式,而不是默认的写入模式(默认'w'会直接覆盖原有内容)。
1. 基础的追加写法(推荐用with语句)
with语句是Python推荐的文件操作方式,它会自动帮你关闭文件,避免资源泄漏。你只需要把打开模式设为'a'(append的缩写)就行:
追加单行内容
# 打开文件,以追加模式写入,指定UTF-8编码避免乱码 with open('your_records.txt', 'a', encoding='utf-8') as f: f.write('2024-05-20 新增的一条记录\n') # 记得加换行符,不然新内容会和旧内容挤在一起
追加多行内容
如果要一次性加多条记录,可以用writelines()方法:
new_records = [ '2024-05-21 第一条新记录\n', '2024-05-21 第二条新记录\n', '2024-05-21 第三条新记录\n' ] with open('your_records.txt', 'a', encoding='utf-8') as f: f.writelines(new_records)
关于'a'模式的小细节:
- 如果目标文件不存在,
'a'模式会自动创建一个新文件; - 打开文件后,文件指针会直接跳到文件末尾,所有写入操作都会追加在原有内容之后,完全不会覆盖旧内容。
2. 需要追加+读取的场景:用'a+'模式
如果你需要在追加内容的同时,还能读取文件里的内容,可以用'a+'模式。不过要注意:打开文件后指针在末尾,读取前需要手动把指针移到文件开头(用seek(0)):
with open('your_records.txt', 'a+', encoding='utf-8') as f: # 先追加内容 f.write('2024-05-22 追加的新记录\n') # 将文件指针移到开头,才能读取全部内容 f.seek(0) # 读取文件所有内容 all_content = f.read() print(all_content)
3. 有没有专门的追加函数?
其实Python标准库并没有单独的“追加函数”,因为追加操作本质是通过文件打开模式来控制的。不过你可以自己封装一个便捷函数,方便重复使用:
def append_record(file_path, record, add_newline=True): """ 向文件追加一条记录 :param file_path: 文件路径 :param record: 要追加的记录内容 :param add_newline: 是否自动添加换行符,默认True """ # 如果需要换行且内容末尾没有换行符,就加上 if add_newline and not record.endswith('\n'): record += '\n' with open(file_path, 'a', encoding='utf-8') as f: f.write(record) # 调用这个函数 append_record('daily_log.txt', '完成了Python文件操作的学习') append_record('daily_log.txt', '这条记录不需要换行', add_newline=False)
小提醒
- 一定要指定
encoding='utf-8',不然在不同操作系统(Windows/macOS/Linux)下可能会出现乱码问题; - 如果有多个进程/线程同时往同一个文件追加内容,可能会出现内容交错的情况,这时候需要用到文件锁(Unix用
fcntl模块,Windows用msvcrt模块),不过单线程场景一般不用考虑这个。
内容的提问来源于stack exchange,提问作者rko
相关产品推荐
相关产品推荐

