从TXT文件提取段落去空行:代码输出出现None问题求助
问题分析与解决方案
问题根源
- 原代码的
__next__方法遇到非空行就直接return,导致每个段落只能返回第一行,后续行被留到下一次迭代处理,这也是段落内文本被拆分输出的原因。 - 当遇到空行时,代码执行
break跳出循环,但此时__next__没有返回值,Python默认返回None,这就是输出中出现None的直接原因。 - 未将段落内的多行文本拼接为完整段落。
修正后的代码
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
相关产品推荐
相关产品推荐

