我成像这将是一项简单的任务,但我无法在以前的StackOverflow问题中找到我正在寻找的内容...
我有一个专有格式的大文本文件看起来像这样:
:Entry
- Name
John Doe
- Date
20/12/1979
:Entry
-Name
Jane Doe
- Date
21/12/1979
等等。
文本文件的大小范围从10kb到100mb。我需要通过:Entry
分隔符拆分此文件。我如何根据:Entry
块处理每个文件?
答案 0 :(得分: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)
产量
['- 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:
...
答案 1 :(得分:4)
如果每个条目块都以冒号开头,则可以按以下方式拆分:
with open('entries.txt') as fp:
contents = fp.read()
for entry in contents.split(':'):
# do something with entry