Python如何在文本文件末尾按条件追加新行避免多余空行
Python实现文件末尾追加行无多余空行方案
方案1:全场景通用实现(支持大文件)
该方案不需要读取整个文件,仅读取文件末尾1个字节判断是否存在换行符,性能更高且不会修改原有文件内容,适合所有体积的文件:
import os def append_row_without_blank(fname: str, new_row: str): file_exist = os.path.exists(fname) need_prefix_newline = False # 仅当文件存在且非空时判断末尾是否有换行 if file_exist and os.path.getsize(fname) > 0: with open(fname, 'rb') as f: # 指针跳转到最后1个字节 f.seek(-1, os.SEEK_END) last_byte = f.read(1) # 兼容Windows(\r\n)、Unix(\n)的换行格式 need_prefix_newline = last_byte not in (b'\n', b'\r') with open(fname, 'a', encoding='utf-8') as f: # 末尾无换行时才加前置换行 if need_prefix_newline: f.write('\n') # 先去掉待写入内容自带的换行符避免重复 f.write(new_row.rstrip('\r\n')) # 若需要保证写入后新行末尾自带统一换行符,可开启下面一行 # f.write('\n')
方案2:基于readlines实现(适合小文件)
就是你提到的按行读取的逻辑,优点是逻辑直观易修改,缺点是大文件场景下会占用过多内存:
def append_row_with_readlines(fname: str, new_row: str): lines = [] try: with open(fname, 'r', encoding='utf-8') as f: lines = f.readlines() except FileNotFoundError: pass with open(fname, 'w', encoding='utf-8') as f: # 写入原有内容,统一每行换行格式,去掉末尾多余空行 for line in lines: stripped_line = line.rstrip('\r\n') if stripped_line: f.write(stripped_line + '\n') # 写入新行 f.write(new_row.rstrip('\r\n') + '\n')
内容的提问来源于stack exchange,提问作者Fadri
相关产品推荐
相关产品推荐

