繁体   English   中英

创建JSON文件时,Python代码花费很长时间

[英]Python code is taking very long time while creating JSON file

我正在使用python 2.6.6版本,并编写了代码以创建JSON文件,该文件从如下所示的Oracle表读取数据。

#!/usr/bin/python
import json
import cx_Oracle
import collections
from collections import OrderedDict
import sys
import os
import logging
from datetime import datetime

connstr = u'username/password@dbname'
conn = cx_Oracle.connect(connstr)
r_cursor = conn.cursor()
r_cursor.execute("sql query")
prows = r_cursor.fetchall()
objects_list = []

for prow in prows:
    p = collections.OrderedDict()
    p['col1'] = prow[0]
    p['col2'] = prow[1]
    p['col3'] = prow[2]
    p['col4'] = prow[3]
    p['col5'] = prow[4]
    #This is to filter the null columns
    pf = OrderedDict((k, v) for (k, v) in p.iteritems()
                        if v not in ('None', None))
    objects_list.append(pf)

if len(objects_list)>0:
    ef['name'] = objects_list
else:
    pass

j = json.dumps(ef,indent=2)
objects_file = 'filename.js'
f = open(objects_file,'w')
print >> f,j
conn.close()
f.close()

当读取100 k条记录时,它非常快,并且在5秒内完成,但是当读取1.5 million条记录时,需要15分钟。 我试着给出prows = r_cursor.fetcmany(100000)然后它很快就完成了,只有100000条记录出来了。 您能否建议每次读取100000条记录时如何读取数据并将其循环以用于下一条记录。 听说generator将以这种方式工作。 您能在这里建议如何使用发电机吗?

不是答案,而是怎么写呢?

prow = [None, 1, 2, 3, 4]
collections.OrderedDict(('col{}'.format(i+1), prow[i]) for i in range(5) if prow[i] not in ("None",None))

返回值:

OrderedDict([('col2', 1), ('col3', 2), ('col4', 3), ('col5', 4)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM