我正在编写一个脚本,该脚本生成数百万个项目的列表,然后基于第一个列表生成另一个列表。它非常快速地填充内存,脚本无法继续。 我认为将列表直接存储在文件中然后直接在文件行上循环可能是一个好主意。 什么是最有效的方法来做到这一点?编写一个高效的python邻接树生成脚本
编辑:
我想按行生成一个行。 row5_nodes可以得到项目的百万,因为我用它来生成row6_nodes
import random
class Node:
def __init__(self, id, name, parent=None):
self.id = id
self.name = name
self.parent = parent
def write_roots(root_nodes, roots):
global index
index = 0
for x in xrange(0,roots):
node = Node(index,"root"+str(x))
root_nodes.append(node);
f.write(str(node.id)+","+str(node.name)+","+str(node.parent)+"\n")
index += 1;
return
def write_row(parent_nodes, new_nodes, children):
global index
for parent_node in parent_nodes:
for x in xrange(0,children):
node = Node(index,"cat"+str(parent_node.id)+"-"+str(x), parent_node.id)
new_nodes.append(node);
f.write(str(node.id)+","+str(node.name)+","+str(node.parent)+"\n")
index += 1;
return
f = open("data.csv", "wb")
roots = 1000
root_nodes =[]
row1_nodes =[]
row2_nodes =[]
row3_nodes =[]
row4_nodes =[]
row5_nodes =[]
row6_nodes =[]
row7_nodes =[]
row8_nodes =[]
row9_nodes =[]
write_roots(root_nodes, roots)
print "1"
write_row(root_nodes, row1_nodes, random.randrange(0,10))
print "2"
write_row(row1_nodes, row2_nodes, random.randrange(0,10))
print "3"
write_row(row2_nodes, row3_nodes, random.randrange(0,10))
print "4"
write_row(row3_nodes, row4_nodes, random.randrange(0,10))
print "5"
write_row(row4_nodes, row5_nodes, random.randrange(0,10))
print "6"
f.close()
是否第二个过程需要对第一个列表随机访问,也可按顺序处理的项目?如果是这样,请使用生成器而不是在内存中实现列表。 – 2013-05-07 10:06:32
最好的解决方案将取决于您在构建完列表之后计划对列表执行的操作。这可能值得详细阐述你想要达到的目标。 – Aya 2013-05-07 10:08:05
你是什么意思,在文件中存储列表然后(稍后)再次循环它的最有效方法是什么?我只能想到明智的解决方案。你有什么尝试?我同意,如果你打算通过第一个清单,直接做,并只存储最终结果离开内存。 – poke 2013-05-07 10:09:25