在文件中的字符串后获取数字

时间:2018-09-06 17:10:47

标签: python python-3.x file

假设我有一个“ sample.txt”

foo: 32
boo: 74

我想抓住foo:之后的内容。更具体地说,我希望出现在特定字符串之后的数字。我可以在大约15行代码中毫不含糊地完成此操作。 1-5行长的一些选项是什么?如果有一种numpy的方式,那也是很酷的,因为我经常使用它。我敢肯定有很多单行代码,但是我想要一些简短的清晰(python zen。)

示例: test.txt->

Seven is 7
Eight: not nine

ugly.py->

def read_pram(fname, hstring):
    fobj = open(fname)
    for line in fobj:
    i = 0
        for elem in line.split():
            if elem == hstring:
                desire = line.split()[i+1]
            i = i + 1
    return desire 

print(read_pram('test.txt', 'Seven is'))
>>> 7

3 个答案:

答案 0 :(得分:1)

您可以遍历文件以逐行读取它。然后,您可以在冒号处分割这些行。

由于文件看上去很像字典,因此可以将其解析为dict

with open('sample.txt', 'r') as f:
    d = {}
    for line in f:
        k, v = line.split(':')
        d[k] = int(v)

print(d)
print(d.get('foo'))

sample.txt

foo: 32
boo: 74

输出

{'foo': 32, 'boo': 74}
32

答案 1 :(得分:0)

'POST'

此答案有效,无论冒号之前是什么。我只是在其中包括打印语句,所以您可以看到得到的内容。 for循环的第二行是获取文件中每一行编号的内容。

答案 2 :(得分:-1)

更新:以您的脚本和示例为指南,在注释中建议进行改进,并使用re模块:

import re

def read_param(fname, hstring):
    with open(fname, 'r') as f: 
        return re.search(hstring + '\s*(\d+)', ''.join(f.readlines())).group(1)

print(read_param('sample.txt', 'foo: '))
>>> 32

print(read_param('test.txt', 'Seven is'))
>>> 7