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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:24:04