代码之家  ›  专栏  ›  技术社区  ›  Mark Harrison

Python:动态列表解析和处理

  •  1
  • Mark Harrison  · 技术社区  · 15 年前

    [{'foo': '1'},{'bar':2},...]
    

    创建这个列表需要很长时间,可能会有很多GB,所以我不想在内存中重新构建它,然后对它进行迭代。

    如何解析部分完成的列表,以便在收到每个字典时对其进行处理?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Alex Martelli    15 年前

    Python标记器是Python标准库模块的一部分 tokenize . 它的输入依赖于一开始的接收 readline [ 一切都将是一个“逻辑”行(无论如何)。唯一需要小心避免被破坏的标记将是带引号的字符串。我现在不打算深入研究这个问题,因为如果你的输入中有新行,你就不必担心了。

    从标记流中,您可以重构表示列表中每个dict的字符串(从左括号标记到右括号),并使用 ast.literal_eval 获取相应的Python dict。

    那么,你的输入中有新行吗?如果是这样,那么整个任务应该很容易。

        2
  •  0
  •   S.Lott    15 年前

    编剧

    import shelve
    db= shelve.open(filename)
    count= 0
    for ...whatever...
        # build the object
        db[count]= object
        count += 1
    db['size']= count
    db.close
    

    读卡器

    import shelve
    db= shelve.open(filename)
    size= db['size']
    for i in xrange(size):
        object= db[i]
        # process the object
    db.close()