在Python中按定界符拆分大型文本文件
我想这应该是个简单的任务,但我在之前的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:
...