代码之家  ›  专栏  ›  技术社区  ›  MikeN

像字符串拆分操作一样,根据行将文本文件分成块?

  •  3
  • MikeN  · 技术社区  · 14 年前

    所以文件是这样的:

    BOBO:12341234123412341234
    1234123412341234123412341
    123412341234
    BOBO:12349087609812340-98
    43690871234509875
    45
    
    BOBO:32498714235908713248
    0987235
    

    我想在以“^BOBO:”开头的行上创建3个子文件。我不需要3个物理文件,我更喜欢3个不同的文件指针。

    2 回复  |  直到 14 年前
        1
  •  3
  •   unutbu    14 年前

    也许用 itertools.groupby :

    import itertools
    
    def bobo(x):    
        if x.startswith('BOBO:'):
            bobo.count+=1
        return bobo.count
    bobo.count=0
    
    with open('a') as f:
        for key,grp in itertools.groupby(f,bobo):
            print(key,list(grp))
    

    (1, ['BOBO:12341234123412341234\n', '1234123412341234123412341\n', '123412341234\n'])
    (2, ['BOBO:12349087609812340-98\n', '43690871234509875\n', '45\n', '\n'])
    (3, ['BOBO:32498714235908713248\n', '0987235\n'])
    

    import cStringIO
    with open('a') as f:
        file_handles=[]
        for key,grp in itertools.groupby(f,bobo):
            file_handles.append(cStringIO.StringIO(''.join(grp)))
    

    file_handles 将是一个类似文件的对象列表,每个“BOBO:”节一个。

        2
  •  1
  •   g.d.d.c    14 年前

    subFileBlocks = []
    
    with open('myReportFile.txt') as fh:
      for line in fh:
        if line.startswith('BOBO'):
          subFileBlocks.append(line)
        else:
          subFileBlocks[-1] += line
    

    子文件块的末尾应该包含字符串形式的节。