假设我有一个“ 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
答案 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'))
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