python根据文本文件每行的前x个字母创建变量
脚本编写新手 有2个txt文件,输出来自cisco交换机的show vlan简介。希望比较两者并确定任何差异。下面是一个脚本,显示了相等的行,但由于某种原因,如果我将“==”更改为“!=”它将把结果打印19次。希望有人能给我指出正确的方向。我不想把它弄对,而是想理解它为什么这样做的背后的逻辑。提前谢谢 文本文件示例:python根据文本文件每行的前x个字母创建变量,python,Python,脚本编写新手 有2个txt文件,输出来自cisco交换机的show vlan简介。希望比较两者并确定任何差异。下面是一个脚本,显示了相等的行,但由于某种原因,如果我将“==”更改为“!=”它将把结果打印19次。希望有人能给我指出正确的方向。我不想把它弄对,而是想理解它为什么这样做的背后的逻辑。提前谢谢 文本文件示例: n1000v# show vlan brief VLAN Name Status Ports ---- -----
n1000v# show vlan brief
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Po1, Po2, Po12, Veth1, Veth2
Veth3, Veth10, Veth100
2 VLAN0002 active
100 VLAN0100 active
-如果有差异,我只想返回以下内容
1 default
2 VLAN0100
100 VLAN0100
代码示例:
file1 = open("file1.txt", "r")
file2 = open("file2.txt", "r")
file3 = open("results.txt", "w")
list1 = file1.readlines()
list2 = file2.readlines()
file3.write("here: \n")
for i in list1:
for j in list2:
if i==j:
file3.write(j)
file1.close()
file2.close()
file3.close()
关于“我想了解它为什么这样做背后的逻辑”。考虑这个简化版本:
list1 = ["line1", "line2", "line3"]
list2 = ["line1"]
for i in list1:
for j in list2:
if i != j:
print j
这将打印出
line1
整整两次,因为这是它在列表1中不出现的频率。如果我正确理解您的问题,您只需逐行同时读取每个文件,然后在两行不匹配时打印(或写入另一个文件)。下面的代码还打印行号,我认为这是一个有用的补充
with open('test1.txt', 'r') as file1, open('test2.txt', 'r') as file2:
print("line\tfile1\tfile2\n")
for i, (line1, line2) in enumerate(zip(file1, file2), 1):
if line1 != line2:
print("{}:\t\t{}\t{}".format(i, line1.strip(), line2.strip()))
我的测试文件的输出:
line file1 file2
1: that this
6: 5 6
7: bird tree
理解逻辑部分:好吧,您是在另一个文件中逐行循环一个文件(嵌套循环),因此将相等(最多一次为true)更改为不相等(在所有其他情况下为true),将导致打印所有这些情况下的行,在您的示例中,这显然是19。不要管这部分:-我只想在有差异的情况下返回以下内容1默认值2 VLAN0100 100 VLAN0100Hi和welcome。您应该编辑问题,而不是将更改添加为注释。添加了关于实际问题的答案,即发生这种情况的原因。关于如何做到这一点,我会考虑使用常规UNIX工具。例如,通过管道将
grep
过滤您感兴趣的行,并awk
ing选择感兴趣的列,然后diff
ing结果。或者,如果您想在Python中实现这一点,您可以查看。