如何在Python中从文件读取到下一行的下一个单词或多个单词?

1 投票
5 回答
2581 浏览
提问于 2025-04-18 13:22

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

具体来说 - 我有一个文件,里面有以下内容:

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

我想搜索这个文件,看看里面是否包含“Server version:”这个子字符串。如果找到了,我想读取“Server version:”后面的字符,直到下一行。在这个例子中,就是“5.0.21”。

我尝试了以下代码,但它返回的是下一行的内容(-- PHP Version: 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

就像你有的那样

line='-- Server version: 5.0.21'

只是:

line.split()[-1]

这样做会让你得到最后一个单词,而不是冒号后面的所有字符。

如果你想要冒号后面的所有字符

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

可以根据需要把冒号替换成其他字符串。

1

你可能想要这样替换那个文本

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

我们使用 line.rstrip() 是因为读取的 line 末尾会有一个换行符,我们需要把它去掉。

1

你可以试着使用字符串的 split 方法,把你想要去掉的部分(比如 'Server version: ')当作分隔符来使用:

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

可能有点过于复杂,但你也可以使用 正则表达式 模块 re

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

这样做的好处是你只需要输入一次关键字,不过当然你也可以把其他解决方案放到一个函数里,这样也能达到同样的效果。此外,你还可以进行一些额外的验证。

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

撰写回答