2024-09-22 14:27:33 发布
网友
基本上,我想做以下工作,我有一个文件中充满了这样的行
Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"
我需要做以下工作
If("IOSQ" in line):然后捕获地址的值,即"0x218464000"
If("IOSQ" in line):
"0x218464000"
如何用Python编写脚本?你知道吗
你可以使用正则表达式。你知道吗
import re my_string = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"' pattern = re.compile(r'IOSQ.*?ADDRESS="(\dx\d+)') matches = re.findall(pattern, my_string) print(matches)
模式是r'IOSQ.*?="(\dx\d+)。r'something'是一个原始字符串,您应该始终使用它。然后IOSQ需要这些字母的精确匹配。.*?表示匹配任何字符,从0到尽可能少(直到找到完全匹配)。圆括号使findall只返回圆括号的内容。\d表示数字0到9。+表示前面的一个或多个字符被匹配。你知道吗
r'IOSQ.*?="(\dx\d+)
r'something'
IOSQ
.*?
findall
\d
+
一种方法是使用shlex.split标准化数据(引号等),然后构建key=value的dict,如果类型为“IOSQ”,则获取地址(或空白),否则将地址保留为空白,例如:
shlex.split
import shlex s = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"' d = dict(el.partition('=')[::2] for el in shlex.split(s)) # {'QID': '8', 'TYPE': 'IOSQ', 'ADDRESS': '0x218464000', 'SIZE': '1024', 'Queue': ''} address = d.get('ADDRESS', '') if d.get('TYPE') == 'IOSQ' else '' # '0x218464000'
这样做的好处是,您不依赖于文本中key=“something”的顺序相同,并且如果以后需要,您可以随时访问其他键的值。你知道吗
如果数据格式良好,您可以考虑:
lst = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"'.split() def make_dict(lst): return dict([tuple(item.split('=')) for item in lst]) dic = {} dic[lst[0]] = make_dict(lst[1:]) print dic
它给出:
{'Queue': {'QID': '"8"', 'ADDRESS': '"0x218464000"', 'TYPE': '"IOSQ"', 'SIZE': '"1024"'}}
然后可以访问值dic[lst[0]].get('ADDRESS', 'no address').strip('"')。你知道吗
dic[lst[0]].get('ADDRESS', 'no address').strip('"')
你可以使用正则表达式。你知道吗
模式是
r'IOSQ.*?="(\dx\d+)
。r'something'
是一个原始字符串,您应该始终使用它。然后IOSQ
需要这些字母的精确匹配。.*?
表示匹配任何字符,从0到尽可能少(直到找到完全匹配)。圆括号使findall
只返回圆括号的内容。\d
表示数字0到9。+
表示前面的一个或多个字符被匹配。你知道吗一种方法是使用
shlex.split
标准化数据(引号等),然后构建key=value的dict,如果类型为“IOSQ”,则获取地址(或空白),否则将地址保留为空白,例如:这样做的好处是,您不依赖于文本中key=“something”的顺序相同,并且如果以后需要,您可以随时访问其他键的值。你知道吗
如果数据格式良好,您可以考虑:
它给出:
然后可以访问值
dic[lst[0]].get('ADDRESS', 'no address').strip('"')
。你知道吗相关问题 更多 >
编程相关推荐