【问题标题】:Splitting large text file by a delimiter in Python在 Python 中通过分隔符分割大文本文件
【发布时间】:2011-12-20 06:51:17
【问题描述】:

我想象这将是一项简单的任务,但我无法在之前的 StackOverflow 问题中找到我正在寻找的内容...

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

:Entry
- Name
John Doe

- Date
20/12/1979
:Entry

-Name
Jane Doe
- Date
21/12/1979

等等。

文本文件的大小范围从 10kb 到 100mb。我需要用:Entry 分隔符分割这个文件。如何根据 :Entry 块处理每个文件?

【问题讨论】:

    标签: python text-parsing


    【解决方案1】:

    如果每个入口块都以冒号开头,你可以用它来分割:

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

    【讨论】:

    • 效率很低。对于大文件,您将获得Memory Error
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 2015-07-06
      • 1970-01-01
      • 2010-10-03
      • 2012-04-23
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多