Python:动态列表解析与处理
我启动了一个进程,它正在生成一个字典的列表,类似于下面这个:
[{'foo': '1'},{'bar':2},...]
这个列表生成的时间很长,而且可能会有好几个GB,所以我不想把它全部放到内存里再去处理。
我该怎么做才能在列表还没完全生成的时候,就开始处理每一个字典呢?
2 个回答
0
分别对每个字典进行序列化。使用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()
2
Python的分词器是Python标准库的一部分,模块叫做 tokenize。它需要一个 readline
函数来提供输入的“行”,这样它才能逐步处理输入。如果你的输入中没有换行符,你可以通过找到合适的地方来添加换行符来模拟换行,只要不打断一个完整的词就行。因为一开始有个 [
,所以所有内容都会被视为一行。唯一需要小心的就是带引号的字符串,避免被拆开。现在我不打算深入讨论这个,因为如果你的输入中本来就有换行符,那就没什么好担心的。
通过这些分词,你可以重建出列表中每个字典的字符串(从开括号到闭括号),然后使用 ast.literal_eval 来得到对应的Python字典。
那么,你的输入中有换行符吗?如果有,那整个任务应该会非常简单。