Python提取TXT文件主题行时如何实现逐行换行格式化输出
问题根因
读取行时调用的strip()方法会移除行首尾的空白字符,包括每行末尾原本的换行符;后续写入结果文件时没有主动补充换行标记,所有提取到的主题行就会连续拼接在同一行。
修正代码
你可以直接用下面调整后的版本,除了解决换行问题,还补了几个容易踩坑的细节:
import os ans = [] for filename in os.listdir(os.getcwd()): # 跳过目录、输出文件本身以及非txt格式文件,避免读文件报错 file_path = os.path.join(os.getcwd(), filename) if not os.path.isfile(file_path) or filename == 'extracted_data.txt' or not filename.endswith('.txt'): continue with open(file_path, 'r', encoding='utf-8') as rf: for line in rf: stripped_line = line.strip() # 不区分大小写匹配主题行,覆盖Subject、subject、SUBJECT等各种大小写写法 if stripped_line.lower().startswith("subject"): ans.append(stripped_line) with open('extracted_data.txt', 'w', encoding='utf-8') as wf: for line in ans: # 写入时补充换行符,实现每条主题单独占一行 wf.write(f"{line}\n")
补充说明
- 核心修改点只有两处:一是写入每行内容时末尾拼接
\n换行符,二是把重复的大小写判断合并成了不区分大小写的匹配逻辑,减少冗余代码 - 新增的编码参数
encoding='utf-8'可以避免Windows系统下默认gbk编码导致的文件乱码问题 - 如果你不想在写入阶段加换行,也可以在收集内容到
ans列表时就拼接换行符:ans.append(f"{stripped_line}\n"),最后写入时直接调用wf.writelines(ans)即可,最终效果完全一致。
内容的提问来源于stack exchange,提问作者Derek Trisk
相关产品推荐
相关产品推荐

