在Python中用分隔符拆分大文本文件

Kev*_*vin 8 python text-parsing

我成像这将是一个简单的任务,但我无法在以前的StackOverflow问题中找到我正在寻找的内容...

我有一个专有格式的大文本文件看起来像这样:

:Entry
- Name
John Doe

- Date
20/12/1979
:Entry

-Name
Jane Doe
- Date
21/12/1979
Run Code Online (Sandbox Code Playgroud)

等等.

文本文件的大小范围从10kb到100mb.我需要通过:Entry分隔符拆分此文件.我怎么能基于:Entry块处理每个文件?

unu*_*tbu 13

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

产量

['- Name\n', 'John Doe\n', '\n', '- Date\n', '20/12/1979\n']
['\n', '-Name\n', 'Jane Doe\n', '- Date\n', '21/12/1979\n']
Run Code Online (Sandbox Code Playgroud)

或者,要处理组,您实际上不需要转换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:
                ...
Run Code Online (Sandbox Code Playgroud)


inf*_*red 6

如果每个条目块都以冒号开头,则可以通过以下方式拆分:

with  open('entries.txt') as fp:
    contents = fp.read()
    for entry in contents.split(':'):
        # do something with entry  
Run Code Online (Sandbox Code Playgroud)