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

Python 从文本文件中提取特定单词及其后的值,python,python-2.7,extract,word,Python,Python 2.7,Extract,Word,我的输入文件为: 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 senten

我的输入文件为:

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
我怎样才能解决这个问题

您可以使用函数

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
你可以使用函数

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

您可以使用一个简单的计数器进行修复:

found = False
with open("input.txt") as openfile:
     for line in openfile:
         if not found:
             counter = 0
             for part in line.split():
                  counter = counter + 1
                  if "ppl=" in part:
                      print part
                      print line.split()[counter]
                      found = True

您可以使用一个简单的计数器进行修复:

found = False
with open("input.txt") as openfile:
     for line in openfile:
         if not found:
             counter = 0
             for part in line.split():
                  counter = counter + 1
                  if "ppl=" in part:
                      print part
                      print line.split()[counter]
                      found = True

您可以将从
line.split()
生成的列表分配给一个变量,然后使用带有i的while循环作为计数器进行迭代,当您点击“ppl=”时,可以返回“ppl=”和下一个索引

with open("input.txt") as openfile:
for line in openfile:
    phrases = line.split()
    i = 0
    while i < len(phrases):
        if 'ppl=' in phrases[i]
            print "ppl= " + str(phrases[i + 1])
        i += 1
以open(“input.txt”)作为openfile的
:
对于openfile中的行:
短语=line.split()
i=0
而我(短语):
如果短语[i]中的'ppl='
打印“ppl=”+str(短语[i+1])
i+=1

您可以将从
line.split()
生成的列表分配给一个变量,然后使用带有i的while循环作为计数器进行迭代,当您点击“ppl=”时,可以返回“ppl=”和下一个索引

with open("input.txt") as openfile:
for line in openfile:
    phrases = line.split()
    i = 0
    while i < len(phrases):
        if 'ppl=' in phrases[i]
            print "ppl= " + str(phrases[i + 1])
        i += 1
以open(“input.txt”)作为openfile的
:
对于openfile中的行:
短语=line.split()
i=0
而我(短语):
如果短语[i]中的'ppl='
打印“ppl=”+str(短语[i+1])
i+=1

这是因为您要按空格分隔。
ppl
的值将是列表中的下一个元素。如果修改文件是一个选项,请考虑在等号之后删除空间。问题是,我有一个以这种格式装满文件的文件夹,并且我不能修改输入文件:(这是因为你在一个空格上分裂。<代码> ppl < /代码>的值将是列表中的下一个元素。如果修改文件是一个选项,请考虑在等号之后删除空间。问题是我有一个以这种格式装满文件的文件夹,并且我不能修改输入文件:(两次???,怎么…还有其他字符串的确切名称是
ppl=
?哎呀!是的,单词和值在重复。我将发布完整的文件。抱歉我的错误。一秒钟。使用break后它不会打印任何内容:(有错误吗?怎么可能?请注意,您需要为第一个
为第二个循环添加
中断
stmt。我不知道它是否工作:(可能输入文件有问题。我会检查:)但是,我得到了输出。非常感谢你的时间和想法。这帮了我很大的忙。两次???,怎么…还有其他字符串的确切名称是
ppl=
?哦!是的,单词和值在重复。我将发布完整的文件。很抱歉我的错误。一秒钟。使用break后它不会打印任何内容:(有错误吗?怎么可能?请注意,您需要为第一个
为第二个循环添加
中断
stmt。我不知道它是否工作:(可能输入文件有问题。我会检查:)但是,我得到了输出。非常感谢你的时间和想法。它帮助了很多。由于单词的存在,它打印了两次:(如何使它只打印一次)由于单词的存在,它打印了两次:(如何使它只打印一次)。