Захватить число после строки в файле - PullRequest
0 голосов
/ 06 сентября 2018

Предположим, у меня есть `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 голосов
/ 06 сентября 2018

Обновление: использование вашего скрипта и примеров в качестве руководства, улучшения, предложенные в комментариях, и модуль 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
0 голосов
/ 06 сентября 2018

Вы можете перебирать файл, чтобы читать его построчно. Затем вы можете разбить эти строки на двоеточие.

Поскольку ваш файл очень похож на словарь, вот способ проанализировать его как 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
0 голосов
/ 06 сентября 2018
with(open('sample.txt', 'r') as f:
    for l in f:
        print(l[l.index(':')+2:])
        number = l[l.index(':')+2:]

Этот ответ работает независимо от того, что стоит перед двоеточием. Я просто включил туда заявление для печати, чтобы вы могли видеть, что вы получаете. Вторая строка в цикле for - это число, которое получает номер для каждой строки в вашем файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...