如何使用python搜索另一个文件中文件的每一行?

时间:2020-10-11 17:42:31

标签: python file with-statement

我的Expect_cmd.txt(例如f1)是

mpls ldp
snmp go
exit

和我的configure.txt(例如f2)是

exit

这是我正在尝试使用的代码,搜索f2中f1的所有行

with open('expected_cmd.txt', 'r') as rcmd, open('%s.txt' %configured, 'r') as f2:
    for line in rcmd:
            print 'line present is ' + line
            if line in f2:
                    continue
            else:
                    print line

所以基本上我想从第二个文件中没有的第一个文件中打印行。 但是使用上面的代码,我得到的输出为

#python validateion.py
line present is mpls ldp

mpls ldp

line present is snmp go 

snmp go 

line present is exit

exit

不确定为什么要打印匹配的exit

我还想知道是否有内置函数在python中执行此操作?

3 个答案:

答案 0 :(得分:0)

with open('%s.txt' %configured,'r') as f2:
    cmds = set(i.strip() for i in f2)
with open('expected_cmd.txt', 'r') as rcmd:
    for line in rcmd:
            if line.strip() in cmds:
                    continue
            else:
                    print line

这解决了我的问题。

答案 1 :(得分:0)

open文件时获得的文件对象包含有关文件和文件中当前位置的信息。默认情况下,位置是在'r'模式1中打开文件时的开头。

从文件读取(或写入)某些数据时,位置将移动。例如,f.read()读取所有内容并移至文件末尾。重复的f.read()不会读取任何内容。

当您遍历文件(例如line in f2)时,也会发生类似的情况。

我建议,除非文件大小为千兆字节,否则您应该读取两个文件,然后再执行内存中的其余逻辑,例如:

with open('expected_cmd.txt', 'r') as f1:
    lines1 = list(f1)

with open('%s.txt' %configured, 'r') as f2:
    lines2 = list(f2)

然后您可以实现逻辑:

for line in lines1:
    if line not in lines2:
        print(line)

答案 2 :(得分:0)

您完全阅读了configure.txt,并通过删除rcmd中的行来进行搜索。

相关问题