Skip to main content
 首页 » 编程设计

python之从文本文件中提取特定单词及其后的值

2025年05月04日13duanxz

我的输入文件是:

1 sentences, 6 words, 1 OOVs 
1 zeroprobs, logprob= -21.0085 ppl= 15911.4 ppl1= 178704 
6 words, rank1= 0 rank5= 0 rank10= 0 
7 words+sents, rank1wSent= 0 rank5wSent= 0 rank10wSent= 0 qloss= 0.925606 absloss= 0.856944 
 
file input.txt : 1 sentences, 6 words, 1 OOVs 
1 zeroprobs, logprob= -21.0085 ppl= 15911.4 ppl1= 178704 
6 words, rank1= 0 rank5= 0 rank10= 0 
7 words+sents, rank1wSent= 0 rank5wSent= 0 rank10wSent= 0 qloss= 0.925606 absloss= 0.856944 

我想提取单词 ppl 及其后面的值,在本例中为:ppl=15911.4

我正在使用这段代码:

with open("input.txt") as openfile: 
    for line in openfile: 
       for part in line.split(): 
          if "ppl=" in part: 
              print part 

然而,这只是提取词 ppl 而不是值。我还想打印文件名。

预期输出:

input.txt, ppl=15911.4 

我该如何解决这个问题?

请您参考如下方法:

您可以使用 enumerate功能,

with open("input.txt") as openfile: 
    for line in openfile: 
       s = line.split() 
       for i,j in enumerate(s): 
          if j == "ppl=": 
              print s[i],s[i+1] 

例子:

>>> fil = '''1 zeroprobs, logprob= -21.0085 ppl= 15911.4 ppl1= 178704 
6 words, rank1= 0 rank5= 0 rank10= 0'''.splitlines() 
>>> for line in fil: 
        s = line.split() 
        for i,j in enumerate(s): 
            if j == "ppl=": 
                print s[i],s[i+1] 
 
 
ppl= 15911.4 
>>>  

只打印第一个值,

>>> for line in fil: 
        s = line.split() 
        for i,j in enumerate(s): 
            if j == "ppl=": 
                print s[i],s[i+1] 
        break 
 
ppl= 15911.4