基本上,我想做以下,我有一个充满了这样行的文件
Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"
我需要关注,
If("IOSQ" in line):
然后捕获地址的值"0x218464000"
如何在Python中编写脚本?
答案 0 :(得分:2)
您可以使用正则表达式。
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. +
表示匹配前一个字符中的一个或多个。
答案 1 :(得分:0)
如果数据格式正确,您可以考虑这一点:
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('"')
。
答案 2 :(得分:0)
一种方法是使用shlex.split
来标准化数据(引用等..),然后构建key = value的dict,然后获取地址(或空白),如果类型是“IOSQ”,否则离开地址为空白,例如:
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”的顺序是相同的,如果需要,你可以随时访问其他键的值。