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

检查字典是否包含命令输出中的某个字符串

如何解决检查字典是否包含命令输出中的某个字符串

我刚开始学习 python 和 pexpect,我正在尝试检查字典是否包含来自某些命令输出的某个字符串,但我遇到了问题。

假设我向终端发送了一些名为“list”的命令,它会输出某个产品的详细信息:

->list
Color: Maroon Red
Height: 150cm
Code: 4KG-LV
Material: Aluminum
Brand: Toyota 
#and hundreds of more lines...

我有一个代表字典的变量,当我使用'print(license_type)'打印它时输出它:

{'license': '4kg-lv'}

我基本上想检查 list 命令输出中的代码“4KG-LV”是否等于字典中许可证中的值“4kg-lv”。

这样做:

exp.sendline("list")
exp.expect('(?<=Code:\s).*(?=[\r\n])')
firstString = exp.after
print(firstString) 

使用正则表达式解析 list 命令的输出获取/打印值 4KG-LV。我可以确认这有效。

如果我将所有这些放在一个 python 脚本中并检查两个值是否相等(忽略大小写),它应该通过检查。但是,当我尝试检查第一个字符串(list 命令中的代码)是否在字典中时,它输出“NOT EQUAL”

exp.sendline("list")
exp.expect('(?<=Code:\s).*(?=[\r\n])')
firstString = exp.after

# convert dictionary to string
secondString = str(license_type)

if firstString.lower() in secondString.lower()
    print("EQUAL")
else:
    print("NOT EQUAL")

我不允许更改字典中内容的键名/大写。我尝试将字典转换为字符串,并使用 .lower() 将两个字符串转换为小写。我不确定我做错了什么,希望得到任何帮助或参考。

解决方法

不是将字典转换为字符串,只需访问键 license 的值并将其转换为小写字符串并检查 firstString 是否相等。我假设您使用的正则表达式是正确的。

license_type = {'license': '4kg-lv'}
exp.sendline("list")
exp.expect('(?<=Code:\s).*(?=[\r\n])')
firstString = exp.after

if firstString.lower() == license_type.get("license").lower():
    print("EQUAL")
else:
    print("NOT EQUAL")

我在我的 iPython shell 中测试了它,所以它应该可以工作:

In [3]: "4KG-LV".lower() == license_type.get("license").lower()
Out[3]: True

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