如何在python中从文件中读取下一行或下一行的单词?

时间:2014-07-15 08:55:48

标签: python file-io

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

确切地说 - 我有一个文件如下:

-- 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()

5 个答案:

答案 0 :(得分:1)

您可能希望像这样替换

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

我们执行line.rstrip()因为阅读line最后会有一个新行,我们会删除它。

答案 1 :(得分: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 :(得分:1)

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

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

答案 3 :(得分:1)

可能有点矫枉过正,但你也可以使用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 :(得分:0)

你有

line='-- Server version: 5.0.21'

只是:

line.split()[-1]

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

如果您想要:

之后的所有字符
line.split(':', 1)[-1].strip()

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