代码之家  ›  专栏  ›  技术社区  ›  Ben Fisher

Python:通过空行将文件拆分为多个列表

  •  1
  • Ben Fisher  · 技术社区  · 3 年前


    Singapore Smith's Crew
    
    Leader
    Singapore Smith
    d10
    3d8
    3d10
    3d10
    2d8
    3d10
    2d10
    Sharp
    Deadeye
    Hardened Veteran
    
    Sidekick
    Arge
    d8
    4d8
    3d8
    2d6
    3d8
    2d6
    2d6
    Athletic
    Fierce
    
    Ally
    Enki
    d6
    2d6
    3d6
    1d6
    1d6
    1d6
    1d6
    Marksman
    
    Ally
    Kazak
    d6
    2d6
    3d6
    1d6
    1d6
    1d6
    1d6
    Marksman
    
    Ally
    Little Skeet
    d6
    1d6
    1d6
    2d6
    1d6
    1d6
    2d6
    Crafty
    

    我希望在python中将它们拆分为多个列表,例如具有以下结构:

    ["Singapore Smith's Crew]
    [Leader, Singapore Smith, d10, 3d8. etc.]
    [Sidekick, Argue, d8, etc.]
    

    等等

    有人知道怎么做吗?

    提前谢谢

    1 回复  |  直到 3 年前
        1
  •  0
  •   Mark    3 年前

    您可以将文件传递到 itertools.groupby 使用一个键指定行(去掉空格后)不为空。然后列出非空组的列表:

    from itertools import groupby
    
    path = "some/file/path"
    
    with open(path) as f:
        l = [list(g) for k, g in groupby(map(str.strip, f), key=lambda line: line != '') if k]
        print(l)
    

    这张照片是:

    [["Singapore Smith's Crew"], ['Leader', 'Singapore Smith', 'd10', '3d8', ...],..etc]
    

    groupby 生成一个迭代器,因此如果不想生成一个大列表,您也可以循环遍历这些值:

    for k, g in groupby(map(str.strip, f), key=lambda line: line != ''):
        if k:
           # use g