多记事本文件块级文本比对:以首文件为基准去重保留独有内容
文本块级去重实现方案
核心处理逻辑:
- 以第1个文件为比对基准,按空行把文件内容拆分为独立文本块,对块内容做归一化处理(忽略块整体、块内每行的前后缩进/空白)后存入去重集合
- 分别读取另外2个待处理文件,用同样的规则拆分文本块,逐块做归一化后和基准集合比对,剔除和基准内容完全一致的重复块
- 剩余的独有内容块保留原有格式,块之间用空行分隔,输出为新的结果文件
实现代码
把以下代码保存为.py后缀的脚本文件,和3个记事本放在同一目录下运行即可:
def load_and_parse(file_path): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 按连续空行拆分原始块,过滤空内容 raw_blocks = [block.strip() for block in content.split('\n\n') if block.strip()] # 生成归一化块集合:去掉每行前后空白,消除缩进差异影响 normalized_blocks = set() for block in raw_blocks: norm_lines = [line.strip() for line in block.split('\n')] normalized_blocks.add('\n'.join(norm_lines)) return raw_blocks, normalized_blocks if __name__ == '__main__': # 加载基准文件,文件名可根据实际情况修改 _, base_blocks = load_and_parse('file1.txt') # 处理第2个文件 f2_raw, _ = load_and_parse('file2.txt') f2_result = [] for block in f2_raw: norm_block = '\n'.join(line.strip() for line in block.split('\n')) if norm_block not in base_blocks: f2_result.append(block) with open('file2_processed.txt', 'w', encoding='utf-8') as f: f.write('\n\n'.join(f2_result)) # 处理第3个文件 f3_raw, _ = load_and_parse('file3.txt') f3_result = [] for block in f3_raw: norm_block = '\n'.join(line.strip() for line in block.split('\n')) if norm_block not in base_blocks: f3_result.append(block) with open('file3_processed.txt', 'w', encoding='utf-8') as f: f.write('\n\n'.join(f3_result))
使用说明
- 运行前确认3个源文件的文件名和代码中填写的路径一致,默认基准文件名为
file1.txt,两个待处理文件名为file2.txt、file3.txt,文件名不同直接修改代码中对应字符串即可 - 脚本运行后会在同目录生成
file2_processed.txt、file3_processed.txt,就是剔除重复块后的结果文件 - 比对规则只会忽略无意义的前后缩进、空白,只要块内实际文本内容有差异(比如示例中文件3的邮箱地址和基准不同)就不会被误删,完全匹配示例给出的预期输出效果
内容的提问来源于stack exchange,提问作者Soumya_jeet
相关产品推荐
相关产品推荐

