我解析了以下行的文本文件。
stp 11441 0 0 0 0
txt文件中总有2个这样的行出现。我正在寻找行中的第二个值(这里是11441)并将其保存为变量。
我已经弄清楚如何只使用一个变量进行此类操作。 这是我正在使用的代码
import re
with open('cpu.txt', 'r') as file:
for line in file:
match = re.search('stp \d{2,100}', line)
if match:
stp_queue1 = match.group().split( )[1]
但是,我无法理解第二次匹配发生时如何指定变量(stp_queue2
)。
换句话说: 如果文件包含以下两行:
stp 11441 0 0 0 0
stp 20000 0 0 0 0
然后stp_queue1
应为11441,stp_queue2
应为20000。
你能帮帮我吗?
答案 0 :(得分:2)
您可以使用许多模式来解决此问题:
我告诉你三个模式,你可以选择你想要的:
第一种模式:
import re
pattern=r'stp\s(\d+)'
output=[]
with open('file.txt','r') as f:
for line in f:
match=re.search(pattern,line)
output.append(match.group(1))
print(output)
输出:
['11441', '20000']
模式2:
r'[0-9]{5}'
模式3:
Positive Lookbehind (?<=stp\s)
pattern=r'(?<=stp\s)\d+'
答案 1 :(得分:1)
您可以将值添加到字典中,而不是每个都添加到自己的变量中。请参阅下面的代码,将每个匹配项添加到字典中,密钥为stp_queue#,编号从1开始。
import re
dictionary={}
with open('cpu.txt', 'r') as file:
counter=1
for line in file:
match = re.search('stp \d{2,100}', line)
if match:
dictionary["stp_queue"+str(counter)] = match.group().split( )[1]
counter++
print dictionary
然后提取数据dictionary["stp_queue1"]
将返回为找到的第一个匹配项存储的值。
更多关于词典的信息:https://docs.python.org/2/tutorial/datastructures.html#dictionaries
答案 2 :(得分:1)
如果您将它们放入列表中,则会保留订单,并且查找就像stp_queue[0]
import re
stp_queue = []
with open('cpu.txt', 'r') as file:
for line in file:
match = re.search('stp \d{2,100}', line)
if match:
stp_queue.append(match.group().split( )[1])
答案 3 :(得分:0)
如果你只需要一个包含col-sm-4
之后的第一个数字的列表,这可能就足够了:
lg
如果您需要检查该行是否以stp
开头,只需将该验证添加到理解中:
with open('cpu.txt', 'r') as f:
stp_queue = [line.split()[1] for line in f]
print(stp_queue)
答案 4 :(得分:-1)
在正则表达式中使用groups
。
请阅读python正则表达式文档