Создать генератор для чтения каждой строки в текстовом файле в обратном порядке - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь прочитать каждую строку в текстовом файле в обратном направлении.И я пытаюсь сделать это через генератор.Я написал parser_entries(), который принимает итеративную вещь, а возврат строк и выходов берет итеративную вещь, которая возвращает строки и возвращает проанализированные записи по одной (это должен быть генератор).

sample.txt:

2018/03/25-00:08:48.638553  508     7FF4A8F3D704     snononsonfvnosnovoosr
2018/03/25-10:08:48.985053 346K     7FE9D2D51706     ahelooa afoaona woom
2018/03/25-20:08:50.486601 1.5M     7FE9D3D41706     qojfcmqcacaeia
2018/03/25-24:08:50.980519  16K     7FE9BD1AF707     user: number is 93823004
2018/03/26-00:08:50.981908 1389     7FE9BDC2B707     user 7fb31ecfa700
2018/03/26-10:08:51.066967    0     7FE9BDC91700     Exit Status = 0x0
2018/03/26-15:08:51.066968    1     7FE9BDC91700     std:ZMD:

Решение:

def parser_entries(lines=iter(reversed(list(file)))):
    line = lines.split('.', maxsplit=1)
    yield (line[0], line[1])

with open('a.txt') as f:
    lines = parser_entries(f)
    date_part, line = next(lines)

И я получаю ошибку ниже при попытке моего решения:

line = lines.split('.', maxsplit=1)
AttributeError: '_io.BufferedReader' object has no attribute 'split'

1 Ответ

0 голосов
/ 30 января 2019

Вы можете использовать секвенцию последовательности, чтобы сделать это, как показано ниже:

def my_generator(file_name):
    with open(file_name) as file:
        for line in reversed(tuple(file)):
            index = line.find('.')  # Find first occurrence of '.' character.
            if index > -1:  # Character found?
                yield line[:index], line[index:-1]
            else:
                pass  # Not sure what you want to happen...

for data_part, line in my_generator('a_sample.txt'):
    print('data_part: {!r}, line: {!r}'.format(data_part, line))

Вывод:

data_part: '2018/03/26-15:08:51', line: '.066968    1     7FE9BDC91700     std:ZMD:'
data_part: '2018/03/26-10:08:51', line: '.066967    0     7FE9BDC91700     Exit Status = 0x0'
data_part: '2018/03/26-00:08:50', line: '.981908 1389     7FE9BDC2B707     user 7fb31ecfa700'
data_part: '2018/03/25-24:08:50', line: '.980519  16K     7FE9BD1AF707     user: number is 93823004'
data_part: '2018/03/25-20:08:50', line: '.486601 1.5M     7FE9D3D41706     qojfcmqcacaeia'
data_part: '2018/03/25-10:08:48', line: '.985053 346K     7FE9D2D51706     ahelooa afoaona woom'
data_part: '2018/03/25-00:08:48', line: '.638553  508     7FF4A8F3D704     snononsonfvnosnovoosr'
...