比较2个文本文件并输出差异[关闭]
Posted
技术标签:
【中文标题】比较2个文本文件并输出差异[关闭]【英文标题】:Compare 2 text files and output a difference [closed] 【发布时间】:2022-01-03 21:07:03 【问题描述】:我有两个文本文件:
第一个文本文件:
email1@domain.com:password
email2@domain.com:password
email3@domain.com:password
email4@domain.com:password
email5@domain.com:password
第二个文本文件:
email3@domain.com:password
email5@domain.com:password
无论行号如何,如何输出它们之间的差异?我要输出第三个文件:
第三个文本文件:
email1@domain.com:password
email2@domain.com:password
email4@domain.com:password
【问题讨论】:
您想只匹配用户名还是同时匹配用户名和密码?你的例子模棱两可 两者,你能发布一个只有用户名的例子吗? 另外,您在这里展示了file2中缺少的那些,如果file1中缺少file2中的一行怎么办? 好的,让我解释一下。第一个文件包含所有原始电子邮件和密码。第二个文件包含其中的一些(来自第一个文件),所以我想将差异输出到第三个文本文件中,以查看第一个文件中缺少哪些行。 在batch-file 中使用findstr
: findstr /V /I /X /L /G:"2nd.txt" "1st.txt" > "3rd.txt"
【参考方案1】:
假设用户名和密码用冒号分隔,那么你可以这样做:
files = ['file1.txt', 'file2.txt']
usernames = [set(), set()]
for i, file in enumerate(files):
with open(file) as infile:
for line in infile:
usernames[i].add(line.split(':')[0])
for d in usernames[0] - usernames[1]:
print(d)
【讨论】:
【参考方案2】:file1Lines = open("file1.txt", "r").readlines()
file2Lines = open("file2.txt", "r").readlines()
file1Lines.close()
file2Lines.close()
file3LinesOutput = []
for line in file1Lines:
if line not in file2Lines:
file3LinesOutput.append(line)
file3 = open("file3.txt", "w")
file3.writelines(file3LinesOutput)
filr3.close()
这应该可以满足您的要求。它会将第一个文件中的每一行添加到第三个文件中,而不是第二个文件中的每一行
【讨论】:
【参考方案3】:你可以把它拆分成一个列表。
假设第一个文本存储在变量 first_text 中,第二个文本存储在 second_text 中。
由于唯一的区别是断线,您可以将它们分开:
first_list = first_text.split('\n')
second_list = second_text.split('\n')
所以,现在您已将所有电子邮件分隔在列表中。从这里您可以比较两个列表并存储在 output_text 中。
output_list = first_list
for email_first in first_list:
for email_second in second_list:
if (email_first == email_second):
output_list.remove(email_first)
请注意,这是针对您的具体示例,并未正确涵盖第二个列表大于第一个列表的情况。
【讨论】:
以上是关于比较2个文本文件并输出差异[关闭]的主要内容,如果未能解决你的问题,请参考以下文章