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

时间:2014-07-15 17:36:48

标签: python file networking

我是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 权限变量中保存拒绝/许可

  2. 文件

  3. 中保存fisrt ip 地址
  4. 分别从来源目的地变量 file2.txt 保存两个 ip 地址< / p>

  5. ip 变量与来源变量进行比较,如果它们相等,请将该行打印为ip/source, destination permit/deny

  6. 为此,我按照以下方式安排了我的代码:

    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 :(得分: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的信息 - 您只查看了最后一项 请记住,这仅适用于完全匹配,而不是我在上面评论中提到的范围