使用python逐文本比较两个不同的文件
我试图在两个不同的文件中查找相同的单词/文本,但没有得到我要查找的结果 我试着逐行比较,但没有得到结果使用python逐文本比较两个不同的文件,python,python-3.x,Python,Python 3.x,我试图在两个不同的文件中查找相同的单词/文本,但没有得到我要查找的结果 我试着逐行比较,但没有得到结果 with open('top_1k_domain.txt', 'r') as file1: with open('latesteasylist.txt', 'r') as file2: same = set(file1).intersection(file2) same.discard('\n') with open('some_output_file1.txt', 'w')
with open('top_1k_domain.txt', 'r') as file1:
with open('latesteasylist.txt', 'r') as file2:
same = set(file1).intersection(file2)
same.discard('\n')
with open('some_output_file1.txt', 'w') as file_out:
for line in same:
file_out.write(line)
就像我的第一个包含文本的文件一样
google.com
youtube.com
facebook.com
doublepimp.com
uod2quk646.com
qq.com
yahoo.com
tmall.com
其中,第二个文件包含
||doublepimp.com^$third-party
||uod2quk646.com^$third-party
....etc
它没有产生我所期待的应有的产出
doublepimp.com
和
uod2quk646.com
在some_output_file1.txt文件中,但它是空的。这里有人能帮我一下吗通过使用集合交集,两个集合中的项目只有在相同的情况下才会匹配,而这两个文件中的项目并不相同,因为第二个文件中的行不仅包含域名,还有其他AdBlock语法
在与第一个文件中的行执行设置交集之前,应先从第二个文件中的行中提取域名部分:
import re
same = set(file1).intersection((re.findall(r'[a-z0-9.-]+', line) or [''])[0] + '\n' for line in file2)
核心思想是可以的,但是由于第二个文件包含的不仅仅是域,所以您需要首先去掉它
|example.com^$third party
永远不会等于example.com
一种可能性:
same = set(file1).itersection(set(x[2, x.index('^')-2]+'\n' for x in file2))
你好,我希望你做得很好,你能给我们和你使用的两个文件的例子吗?希望的产出呢?请提前感谢。第一个文件包含域名,第二个文件包含过滤规则。我必须检查过滤规则中描述的是哪个域名的规则。我正试图从两个文件中提取域名,这两个文件都是通用的,并且为其定义了规则,因此您的响应将被命名为@GuillaumeLastecoueres thanksit,以获取AttributeError:“NoneType”对象没有属性“group”,这是因为您的第二个文件中的某些行根本没有域名。我已经更新了我的答案,因此这些行被忽略。我还有一个问题,如果你愿意为我做这件事,我将感谢你@blhsing我也在尝试获取仅包含此类rule/example.js$script的规则类型,domain=example.com您能帮我做一个patteren吗?这样我就可以从过滤器列表中获取这种类型的规则了?很高兴能为您提供帮助。但这确实超出了这个问题的范围。请用格式化的代码在新问题中提问,以便人们能够更好地提供帮助。如果遇到子字符串未找到的错误,请您在@mhhollomon完成我的代码,因为我仍处于学习阶段