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

Python3如何判断文件空行,仅写入非空行且保留原有缩进

代码问题梳理

你写的代码存在3个核心问题,所以运行后没有效果:

  • 读完文件后指针位置错误:用r+模式打开文件后,第一个for line in f遍历完所有行,文件指针已经移动到文件末尾,第二个循环不会读到任何内容,写操作完全没有执行
  • write方法使用错误:你给write传入了生成器表达式,而write只能接收字符串参数,就算执行到写逻辑也无法正确写入内容
  • 空行判断逻辑不合理:用len(line) > 2会误删长度为2的短行(比如内容为a\n的有效行),也无法过滤带空格的空白行

空行判断逻辑说明

你可以根据自己的需求选对应判断规则,两种规则都不会修改原有行的缩进:

  • 仅删除纯换行的空行(也就是你理解的单独的\n):判断条件用line != '\n'
  • 同时删除全是空格/制表符的空白行:判断条件用line.strip() != '',该判断仅验证行是否为空,不会修改原行的缩进内容

正确实现代码

推荐用读写分离的方式,避免误操作损坏原文件:

# 读取原文件所有行
with open(file_name, mode='r', encoding='utf-8') as f:
    lines = f.readlines()

# 过滤空行,这里可以替换成你需要的判断规则
filtered_lines = [line for line in lines if line != '\n']

# 写回文件
with open(file_name, mode='w', encoding='utf-8') as f:
    f.writelines(filtered_lines)

如果要在同一个r+模式的上下文里操作,需要手动调整指针并截断残留内容:

with open(file_name, mode='r+', encoding='utf-8') as f:
    lines = f.readlines()
    filtered_lines = [line for line in lines if line != '\n']
    # 指针移到文件开头
    f.seek(0)
    # 写入过滤后的内容
    f.writelines(filtered_lines)
    # 截断删除原有残留的内容
    f.truncate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:39:05