【问题标题】:Compare 2 text files and output a difference [closed]比较2个文本文件并输出差异[关闭]
【发布时间】: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"

标签: python batch-file compare difference


【解决方案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)
      

      请注意,这是针对您的具体示例,并未正确涵盖第二个列表大于第一个列表的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-01
        • 2022-10-13
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        相关资源
        最近更新 更多