Python:动态列表解析和处理

Python:动态列表解析和处理,python,Python,我提出了一个过程,它将生成一个字典列表,类似于: [{'foo': '1'},{'bar':2},...] 创建该列表需要很长时间,可能需要很多GB,因此我不想在内存中重新构建它,然后对其进行迭代 如何解析部分完成的列表,以便在收到每个字典时对其进行处理?Python标记器作为Python标准库模块的一部分提供。它的输入依赖于在开始时接收一个readline函数(该函数必须向它提供一个“行”输入),因此它可以增量操作——如果输入中没有换行符,您可以模拟它,只要您能够识别添加换行符是无害的(不要

我提出了一个过程,它将生成一个字典列表,类似于:

[{'foo': '1'},{'bar':2},...]
创建该列表需要很长时间,可能需要很多GB,因此我不想在内存中重新构建它,然后对其进行迭代


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

Python标记器作为Python标准库模块的一部分提供。它的输入依赖于在开始时接收一个
readline
函数(该函数必须向它提供一个“行”输入),因此它可以增量操作——如果输入中没有换行符,您可以模拟它,只要您能够识别添加换行符是无害的(不要破坏一个令牌——多亏了开头的
[
所有东西都是一个“逻辑”行)。唯一需要小心避免破坏的令牌将是引号字符串。我现在不深入探讨这个问题,因为如果你的输入中真的有新行,你就不必担心了

从标记流中,您可以重构表示列表中每个dict的字符串(从开始的大括号标记到平衡的闭括号),并使用它来获取相应的Python dict


那么,您的输入中有换行符吗?如果有,那么整个任务应该非常简单。

分别Pickle每个字典。Shelve可以帮助您完成这项工作

作家

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()

它正在生成一个字典列表,或者它正在输出一个很长的JSON字符串?一个字典列表,但是如果有一种处理JSON流的等效技术,我也会感兴趣。它们是任何东西的通用Python指令,还是仅仅是字符串和整数?请澄清(1)您可以修改生成过程吗?(2)如果没有,具体传输的字节是什么…repr(dicts列表)还是其他内容??