微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我的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中执行此操作?

解决方法

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

这解决了我的问题。

,

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)
,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。