首先,我在网上和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()
答案 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))
这里有几个调整:
strip
每条线都有。{/ li>
{}
和.format()
来构建文本字符串。\n
确保我们将每个条目放在输出文件的新行上。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()