我可以找到关于模糊搜索的几个资源,但没有关于模糊文件/字符串比较的资源。有没有办法比较文件而忽略简单的差异(如日期和电子邮件地址)?
我正在考虑一个可以传递2个字符串的函数/工具和正则表达式列表。返回将是一个差异列表,除了与传递的正则表达式匹配的差异。
作为第一遍,我正考虑包装difflib
并测试与传递的正则表达式的差异对,但有没有更好的方法来实现这一点?
答案 0 :(得分:1)
假设您有一个元组列表,其中每个元组都有一个正则表达式和一个字符串
re.sub
我们可以构建一个由此产生的生成器管道,它将使用import re
def replace(pat, repl, iterable):
pat = re.compile(pat)
for string in iterable:
yield pat.sub(repl, string)
def reader(filelist):
for name in filelist:
with open(name) as f:
yield f.read()
filelist = ['filename1.txt', 'filename2.txt', ...]
patterns = [(r'\d\d?/\d\d?/\d\d\d\d', '00/00/0000'), ...]
source = reader(filelist)
gen = source
for pat, repl in patterns:
gen = replace(pat, repl, gen)
for string in gen:
print(string)
执行连续替换,以混淆日期,时间,电子邮件地址等方面的差异。
for
在上一个gen
循环中,diff
是一个生成文件的已清理内容的生成器。在这里我打印它们,但您可以将它们写回文件,保存它们,一次分析一个,或运行一些迭代{{1}}。