python根据文本文件每行的前x个字母创建变量

python根据文本文件每行的前x个字母创建变量,python,Python,脚本编写新手 有2个txt文件,输出来自cisco交换机的show vlan简介。希望比较两者并确定任何差异。下面是一个脚本,显示了相等的行,但由于某种原因,如果我将“==”更改为“!=”它将把结果打印19次。希望有人能给我指出正确的方向。我不想把它弄对,而是想理解它为什么这样做的背后的逻辑。提前谢谢 文本文件示例: n1000v# show vlan brief VLAN Name Status Ports ---- -----

脚本编写新手

有2个txt文件,输出来自cisco交换机的show vlan简介。希望比较两者并确定任何差异。下面是一个脚本,显示了相等的行,但由于某种原因,如果我将“==”更改为“!=”它将把结果打印19次。希望有人能给我指出正确的方向。我不想把它弄对,而是想理解它为什么这样做的背后的逻辑。提前谢谢

文本文件示例:

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中实现这一点,您可以查看。