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

从TXT文件提取段落去空行:代码输出出现None问题求助

问题分析与解决方案

问题根源

  1. 原代码的__next__方法遇到非空行就直接return,导致每个段落只能返回第一行,后续行被留到下一次迭代处理,这也是段落内文本被拆分输出的原因。
  2. 当遇到空行时,代码执行break跳出循环,但此时__next__没有返回值,Python默认返回None,这就是输出中出现None的直接原因。
  3. 未将段落内的多行文本拼接为完整段落。

修正后的代码

class ByParagraph:
    def __init__(self, iterable):
        self.iterable = iterable

    def __iter__(self):
        return self

    def __next__(self):
        paragraph = []
        for line in self.iterable:
            stripped_line = line.strip()
            if not stripped_line:
                # 遇到空行:若已收集段落内容则停止,否则跳过连续空行
                if paragraph:
                    break
                else:
                    continue
            paragraph.append(stripped_line)
        else:
            # 文件读完且无剩余段落内容时,触发停止迭代
            if not paragraph:
                raise StopIteration()
        # 拼接段落内的所有行,用空格分隔
        return ' '.join(paragraph)


with open("example.txt") as f:
    for p in ByParagraph(f):
        print(p)

关键修正说明

  • 新增paragraph列表收集当前段落的所有非空行内容,确保完整获取段落信息。
  • 处理空行时区分“连续空行”和“段落结束空行”,避免无效的空行触发错误返回。
  • 用' '.join(paragraph)将段落内的多行文本拼接为完整段落,匹配期望输出格式。
  • 严格控制StopIteration的触发时机,避免迭代提前终止或无效返回。

运行后输出(符合期望)

This is an a sentence.
This is another sentence. Followed by yet another one.
This is not the last sentence. This one neither.
This one is the last one.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:50:22