如何在Python中比较不同文件的值

0 投票
1 回答
795 浏览
提问于 2025-04-18 13:26

我刚开始学Python,对处理文件也不太熟悉。所以,我在写一个简单程序时遇到了很大的问题。我的程序需要用到两个文件:

file1.txt:

access-list 1 deny 172.16.4.13 0.0.0.0
access-list 1 permit 172.16.5.0 0.0.0.255

interface EO
ip access-group 1 out

file2.txt:

172.16.4.13 172.16.3.2
172.16.5.2 172.16.3.4
172.16.5.0 172.16.3.4

输出结果大概是这样的:

172.16.4.13 172.16.3.2 denied
172.16.5.0 172.16.3.4 permit

我的逻辑是:

  1. file1.txt中提取deny/permit这个词,保存在permission变量里

  2. file1.txt中提取第一个ip地址,保存在ip变量里

  3. file2.txt中提取两个ip地址,分别保存在sourcedestination变量里

  4. ip变量和source变量进行比较,如果它们相等,就打印出这一行,格式为ip/source, destination permit/deny

为此,我把代码安排成了这样:

file1 = open("file1.txt","r")

line = file1.readline()
while line:
    values = line.split()
    permission = values[2]
    ip = values[3]
    line = file1.readline()



file2 = open("file2.txt","r")

line = file2.readline()
while line:
    value = line.split()
    source = value[0]
    destination = value[1]
    if source == ip:
        print(ip, permission, destination)  
    line = file2.readline()

file2.close()

file1.close()

但是,这样并没有正常工作 :( 我该怎么写这个简单的程序呢?

1 个回答

0

试试这样做

with open('file1.txt') as f1:
    fd1 = {}
    for ln in f1:
        if ln.startswith('access-list'):
            vals = ln.split()
            fd1[vals[3]] = vals[2]

with open('file2.txt') as f2:
    for ln in f2:
        vals = ln.split()
        if vals[0] in fd1:
            print vals[0], fd1[vals[0]], vals[1]

你原来遇到的问题部分是因为你没有保存来自file1的信息——你只看了最后一个项目。记住,这样做只适用于完全匹配,而不是范围匹配,就像我在上面的评论中提到的。

撰写回答