如何提取TXT文件中包含指定关键词的段落?
批量提取TXT文件中含指定关键词的段落
以下是两种实用的实现方法,适配不同场景:
方法一:Python脚本(跨平台、批量处理首选)
适合处理大量文件或需要自定义逻辑的场景。脚本会遍历指定目录下的所有TXT文件,提取包含目标关键词的段落(默认按空行分割段落),并保存为新文件(避免覆盖原文件)。
import os import re # 定义关键词列表 keywords = ["cryptocurren", "virtual curren", "digital curren"] # 编译正则表达式,支持不区分大小写匹配 pattern = re.compile('|'.join(keywords), re.IGNORECASE) # 指定处理目录(当前目录用'.') target_dir = '.' for filename in os.listdir(target_dir): if filename.endswith('.txt'): file_path = os.path.join(target_dir, filename) # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 按空行分割段落(适配\n\n或\r\n\r\n格式) paragraphs = re.split(r'\r?\n\r?\n', content.strip()) # 筛选包含关键词的段落 filtered_paragraphs = [p for p in paragraphs if pattern.search(p)] # 生成输出文件名 output_filename = f"{os.path.splitext(filename)[0]}_filtered.txt" output_path = os.path.join(target_dir, output_filename) # 写入筛选后的内容 with open(output_path, 'w', encoding='utf-8') as f: f.write('\n\n'.join(filtered_paragraphs)) print(f"处理完成:{filename} -> {output_filename}")
脚本说明
- 如需严格区分大小写匹配,删除
re.IGNORECASE参数即可 - 若段落不是以空行分隔,可修改
re.split的正则表达式(比如按特定标记分割) - 处理结果保存为带
_filtered后缀的新文件,原文件不受影响
方法二:命令行工具(快速处理单/批量文件)
Linux/macOS 终端
使用awk处理段落(默认空行分隔),批量处理当前目录下的TXT文件:
# 批量生成带_filtered后缀的新文件 for file in *.txt; do awk -v RS='' '/cryptocurren|virtual curren|digital curren/' "$file" > "${file%.txt}_filtered.txt" done
awk默认区分大小写,如需忽略大小写可添加-v IGNORECASE=1参数- 若要直接覆盖原文件(谨慎操作),将输出路径改为
"$file"
Windows PowerShell
批量处理当前目录下的TXT文件:
Get-ChildItem *.txt | ForEach-Object { $content = Get-Content $_ -Raw # 按空行分割段落并筛选 $filtered = $content -split '\r?\n\r?\n' | Where-Object { $_ -match 'cryptocurren|virtual curren|digital curren' } # 写入新文件 $filtered | Out-File "${_.BaseName}_filtered.txt" -Encoding utf8 }
注意事项
- 关键词采用部分匹配规则(比如
cryptocurren会匹配cryptocurrencies、cryptocurrency等),符合你的需求 - 处理前建议先对单个文件测试,确认结果符合预期后再批量操作
内容的提问来源于stack exchange,提问作者Ciercy
相关产品推荐
相关产品推荐

