Разделение большого текстового файла разделителем в Python - PullRequest
8 голосов
/ 02 ноября 2011

Я представляю, что это будет простая задача, но я не могу найти то, что я ищу, точно в предыдущих вопросах StackOverflow, здесь идет ...

У меня есть большие текстовые файлы в собственном форматеэто выглядит примерно так:

:Entry
- Name
John Doe

- Date
20/12/1979
:Entry

-Name
Jane Doe
- Date
21/12/1979

и т. д.

Размер текстовых файлов варьируется от 10 КБ до 100 МБ.Мне нужно разделить этот файл по разделителю :Entry.Как я могу обработать каждый файл на основе :Entry блоков?

Ответы [ 2 ]

13 голосов
/ 02 ноября 2011

Вы можете использовать itertools.groupby для группировки строк, которые появляются после :Entry, в списки:

import itertools as it
filename='test.dat'

with open(filename,'r') as f:
    for key,group in it.groupby(f,lambda line: line.startswith(':Entry')):
        if not key:
            group = list(group)
            print(group)

выходы

['- Name\n', 'John Doe\n', '\n', '- Date\n', '20/12/1979\n']
['\n', '-Name\n', 'Jane Doe\n', '- Date\n', '21/12/1979\n']

Или, чтобы обработать группы, вам не нужно преобразовывать group в список:

with open(filename,'r') as f:
    for key,group in it.groupby(f,lambda line: line.startswith(':Entry')):
        if not key:
            for line in group:
                ...
4 голосов
/ 02 ноября 2011

Если каждый блок ввода начинается с двоеточия, вы можете просто разделить на это:

with  open('entries.txt') as fp:
    contents = fp.read()
    for entry in contents.split(':'):
        # do something with entry  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...