Python代码修改:在TXT文件中搜索字符串并输出完整句子
解决方案
首先补充原代码缺失的import os,然后针对需求修改代码如下:
import os searchString = 'doctorate' # 遍历目录下所有TXT文件 for eachFile in os.listdir(): if not eachFile.endswith('.txt'): continue # 跳过非TXT文件 with open(eachFile, 'r', encoding='utf-8') as currentFile: content = currentFile.read() # 读取整个文件内容,处理跨行句子 start_idx = 0 while True: # 查找当前位置之后的searchString str_pos = content.find(searchString, start_idx) if str_pos == -1: break # 没有更多匹配,退出循环 # 向前找最近的句点(句子起始) prev_period = content.rfind('.', 0, str_pos) sentence_start = prev_period + 1 if prev_period != -1 else 0 # 向后找最近的句点(句子结束) next_period = content.find('.', str_pos + len(searchString)) sentence_end = next_period + 1 if next_period != -1 else len(content) # 提取并打印完整句子,去除前后空白 full_sentence = content[sentence_start:sentence_end].strip() print(f"文件{eachFile}中匹配的句子:") print(full_sentence) print("-" * 50) # 分隔线 # 更新起始位置,避免重复匹配同一内容 start_idx = sentence_end
关键修改说明
- 过滤TXT文件:新增
endswith('.txt')判断,只处理目标文件类型 - 读取全文内容:替换
readlines()为read(),解决句子跨行的问题 - 定位完整句子:
- 用
rfind从匹配字符串位置向前查找最近的句点,确定句子起点 - 用
find从匹配字符串结束位置向后查找最近的句点,确定句子终点
- 用
- 避免重复匹配:每次处理完一个句子后,将下一次查找的起始位置设为当前句子的终点
注意事项
- 该代码默认句点
.为句子结束标志,如果文本中存在缩写(如Mr.)或其他带句点的非句子结束场景,可能会误分割句子,可根据实际文本规则调整分隔逻辑(比如结合空格判断.) - 如果需要处理编码不统一的TXT文件,可以添加异常捕获机制,避免程序崩溃
内容的提问来源于stack exchange,提问作者VeritLibert
相关产品推荐
相关产品推荐

