获取两个文件之间的差异

时间:2016-10-06 09:33:22

标签: python python-2.7 csv difference differentiation

首先,我在网上和stackoverflow上搜索了大约3天,但没有找到我一直在寻找的东西。

我正在进行每周一次的安全审核,在那里我收到带有IP和开放端口的.csv文件。它们看起来像这样:

20160929.csv

10.4.0.23;22
10.12.7.8;23
10.18.3.192;23

20161006.csv

10.4.0.23;22
10.18.3.192;23
10.24.0.2;22
10.75.1.0;23

区别在于: 10.12.7.8:23 关闭了。 10.24.0.2:22 10.75.1.0:23 开了。

我想要一个打印出来的脚本:

[-] 10.12.7.8:23
[+] 10.24.0.2:22
[+] 10.75.1.0:23

我如何制作这样的剧本?我尝试过我的difflib,但这不是我需要的。我需要能够稍后将其写入文件或将该输出作为邮件发送,我已经有了脚本。

我不能使用Unix,因为在我们公司,我们有一个Windows环境,不允许使用其他操作系统。所以我不能使用diff或其他一些好工具。

这是我的第一次尝试:

old = set((line.strip() for line in open('1.txt', 'r+')))
new = open('2.txt', 'r+')
diff = open('diff.txt', 'w')

for line in new:
    if line.strip() not in old:
        diff.write(line)
new.close()
diff.close()

这是我的第二次尝试

old = set((line.strip() for line in open('1.txt', 'r+')))
new = open('2.txt', 'r+')
diff = open('diff.txt', 'w')

for line in new:
    if line.strip() not in old:
        diff.write(line)
new.close()
diff.close()

3 个答案:

答案 0 :(得分:3)

在下面的解决方案中我使用了套装,所以顺序并不重要,我们可以用旧的和新的直接减法来看看发生了什么变化。

我还使用toSparkType()上下文管理器模式打开文件,这是一种确保它们再次关闭的简洁方法。

with

显然,如果你愿意,你可以打印出diff字符串。

答案 1 :(得分:1)

使用您的代码作为基础,您可以执行以下操作:

old = set((line.strip() for line in open('1.txt')))
new = set((line.strip() for line in open('2.txt')))

with open('diff.txt', 'w') as diff:
    for line in new:
        if line not in old:
            diff.write('[-] {}\n'.format(line))

    for line in old:
        if line not in new:
            diff.write('[+] {}\n'.format(line))

这里有几个调整:

  1. 我们想要阅读旧的和新的各个方面 要比较的文件。
  2. 在阅读文件时,我们不必strip每条线都有。{/ li>
  3. 我们使用{}.format()来构建文本字符串。
  4. 使用\n确保我们将每个条目放在输出文件的新行上。
  5. 使用with作为我们写的文件让我们打开它而不必调用close并且(如果我的知识是正确的)允许我们更好地处理任何程序崩溃一旦文件被删除打开。

答案 2 :(得分:0)

你可以尝试这个:

old_f = open('1.txt')
new_f = open('2.txt')
diff = open('diff.txt', 'w')

old = [line.strip() for line in old_f]
new = [line.strip() for line in new_f]

for line in old:
    if line not in new:
        print '[-] ' + str(line)
        diff.write('[-] ' + str(line) + '\n'


for line in new:
    if line not in old:
        print '[+]' + str(line)
        diff.write('[+] ' + str(line) + '\n'

old_f.close()
new_f.close()
diff.close()