【问题标题】:How to read next word or words till next line from file in python?如何从python中的文件中读取下一个单词或单词直到下一行?
【发布时间】:2014-07-15 08:55:48
【问题描述】:

我正在尝试在匹配单词后从一行中读取单词:

确切地说—— 我有一个包含以下文本的文件:

-- Host: localhost
-- Generation Time: Nov 15, 2006 at 09:58 AM
-- Server version: 5.0.21
-- PHP Version: 5.1.2

我想搜索该文件是否包含“服务器版本:”子字符串,如果包含则读取“服务器版本:”之后的下一个字符直到下一行,在本例中为“5.0.21”。

我尝试了以下代码,但它给出了下一行(-- PHP 版本:5.1.2)而不是下一个单词(5.0.21)。

with open('/root/Desktop/test.txt', 'r+') as f:
    for line in f:
        if 'Server version:' in line:
            print f.next()

【问题讨论】:

  • 既然根据你的cmets,下面的答案对你有帮助,你为什么不接受一个?我想你甚至已经接受了一个,但后来又不接受了——为什么?
  • 我以为所有正确答案都可以接受,但是当我选择时,前一个答案不被接受,而且由于我是新人,所以我也没有足够的声誉来投票。但我尝试了下面的答案,它成功了,所以谢谢你们帮助我。

标签: python file-io


【解决方案1】:

您正在使用 f.next() 它将返回下一行。 相反,您需要:

with open('/root/Desktop/test.txt', 'r+') as f:
    for line in f:
        found = line.find('Server version:')
        if found != -1:
            version = line[found+len('Server version:')+1:]
            print version

【讨论】:

    【解决方案2】:

    您可能希望像这样替换该文本

    if 'Server version: ' in line:
        print line.rstrip().replace('-- Server version: ', '')
    

    我们使用 line.rstrip(),因为读取的 line 将在末尾有一个新行,我们将其删除。

    【讨论】:

    • @tobias_k 我们也可以替换它。我更新了我的答案,请检查
    • @N.N.Ontika 如果你觉得我的回答对你有帮助,你可以Accept my Answer :-)
    【解决方案3】:

    可能有点矫枉过正,但您也可以使用regular expressions 模块re

    match = re.search("Server version: (.+)", line)
    if match:                # found a line matching this pattern
        print match.group(1) # whatever was matched for (.+ )
    

    优点是您只需键入一次密钥,但当然您可以通过将任何其他解决方案包装到函数定义中来获得相同的效果。此外,您还可以进行一些额外的验证。

    【讨论】:

      【解决方案4】:

      您可以尝试对字符串使用split 方法,使用要删除的字符串(即'Server version: ')作为分隔符:

      if 'Server version: ' in line:
          print line.split('Server version: ', 1)[1]
      

      【讨论】:

        【解决方案5】:

        如你所愿

        line='-- Server version: 5.0.21'
        

        只是:

        line.split()[-1]
        

        这会为您提供最后一个单词,而不是 : 之后的所有字符。

        如果你想要:之后的所有字符

        line.split(':', 1)[-1].strip()
        

        根据需要将: 替换为其他字符串。

        【讨论】:

        • 不适用于Generation time,不过……或者,split': ') 呢?
        • @tobias_k OP 问题是针对服务器版本的。
        猜你喜欢
        • 2012-09-23
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 2011-06-02
        • 2020-02-01
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        相关资源
        最近更新 更多