Python如何从txt文件中提取以指定关键词开头的段落
原代码失效原因
你写的逻辑没跑通,是三个明确的问题:
return result缩进错误,被写在了for循环体内部,循环执行第一次就会直接返回结果,根本不会遍历完所有文本行- 按单个换行符拆分内容后,拼接提取结果时没有加回换行分隔,最后输出的内容会全部挤成一整段,丢失原有换行格式
- 直接调用
open()读取文件既没有指定编码,也没有手动关闭文件句柄,遇到带中文/特殊字符的转录稿很容易报编码错误,属于不规范的文件操作写法
修正后代码
def extract_interviewee_content(file_path, keep_keyword="Interviewee: "): content_list = [] # 用with上下文管理器自动处理文件关闭,指定utf-8编码规避乱码 with open(file_path, "r", encoding="utf-8") as f: # 逐行遍历文件,比一次性读全量内容更省内存,长转录稿也不会卡顿 for line in f: line = line.strip() if line.startswith(keep_keyword): # 只替换开头第一次出现的关键词,避免内容里出现相同字符串被误删 pure_content = line.replace(keep_keyword, "", 1).strip() content_list.append(pure_content) # 用换行符拼接所有保留内容,还原原有段落格式 return "\n".join(content_list) if __name__ == "__main__": final_text = extract_interviewee_content("Transcript.txt") print(final_text) # 需要把提取结果存为新文件的话,放开下面三行注释即可 # with open("interviewee_content.txt", "w", encoding="utf-8") as f: # f.write(final_text)
适配特殊场景的调整方案
- 如果你的转录稿里单段受访者发言跨了多行、段落之间用空行(也就是双换行
\n\n)分隔,可以把逐行判断的逻辑改成先读全文,按\n\n拆分段落,再判断每个段落的开头是否匹配关键词即可,核心判断逻辑不变 - 如果需要保留原文本里的空行格式,可以去掉代码里的
strip()调用,直接对原始行做前缀判断即可
内容的提问来源于stack exchange,提问作者livvyc
相关产品推荐
相关产品推荐

