在Python中按定界符拆分大型文本文件

11 投票
2 回答
23863 浏览
提问于 2025-04-17 05:29

我想这应该是个简单的任务,但我在之前的StackOverflow问题中找不到我想要的确切答案,所以我来这里问问……

我有一些大型文本文件,它们是专有格式,内容大概是这样的:

:Entry
- Name
John Doe

- Date
20/12/1979
:Entry

-Name
Jane Doe
- Date
21/12/1979

以此类推。

这些文本文件的大小从10KB到100MB不等。我需要根据:Entry这个分隔符来拆分文件。我该如何处理每个文件中的:Entry块呢?

2 个回答

6

如果每个入口块都是以冒号开头的,那你可以直接用冒号来分割它们:

with  open('entries.txt') as fp:
    contents = fp.read()
    for entry in contents.split(':'):
        # do something with entry  
15

你可以使用 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:
                ...

撰写回答