python: Diferencias métodos ejecución, qué elegir
Publicado: 28 Nov 2015, 14:40
json.loads json.dumps vs exec srt
p_1: procedimiento exec srt
p_2: procedimiento json.loads json.dumps
Script:
Resultados:
Los tiempos entre los dos procedimientos se puede decir que son similares.
Antes los resultados yo me dacantaría el p_1, más simple y menos engorroso, pero... como veo mucha trajín con el método del p_2 (no sólo en este foro, en muchos foros, webs, blogs,...) es posible que se me escape algo que no veo.
Alguién me puede decir dónde radica la diferencia. Un "Si lo hacen todos o casi todos por algo será" no me vale.
p_1: procedimiento exec srt
p_2: procedimiento json.loads json.dumps
Script:
Código: Seleccionar todo
# -*- coding: utf-8 -*-
_json_str = '{"a":{"a1":"a 1","a2":"a 2","a3":"a 3"},"b":{"b1":"b 1","b2":"b 2","b3":"b 3"},"á":"á 0"}'
def p_1(_json_str_1):
print "------------------------------------------------------------------------------"
print "Procedimiento 1 exec str"
print "------------------------------------------------------------------------------"
print "##### p_1._json_str_1 ## %s ##" % _json_str_1
exec "_json_1 = " + _json_str_1
print "##### p_1._json_1 ## %s ##" % _json_1
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print "##### p_1._json_1['a'] ## %s ##" % _json_1['a']
print "##### p_1._json_1['a'][a2] ## %s ##" % _json_1['a']['a2']
print "##### p_1._json_1['b'] ## %s ##" % _json_1['b']
print "##### p_1._json_1['b'][b3] ## %s ##" % _json_1['b']['b3']
print "##### p_1._json_1['á'] ## %s ##" % _json_1['á']
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
_json_str_2 = str(_json_1)
print "##### p_1._json_str_2 ## %s ##" % _json_str_2
exec "_json_2 = " + _json_str_2
print "##### p_1._json_2 ## %s ##" % _json_2
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print "##### p_1._json_2['a'] ## %s ##" % _json_2['a']
print "##### p_1._json_2['a'][a2] ## %s ##" % _json_2['a']['a2']
print "##### p_1._json_2['b'] ## %s ##" % _json_2['b']
print "##### p_1._json_2['b'][b3] ## %s ##" % _json_2['b']['b3']
print "##### p_1._json_2['á'] ## %s ##" % _json_2['á']
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
_json_str_3 = str(_json_2)
print "##### p_1._json_str_3 ## %s ##" % _json_str_3
print "------------------------------------------------------------------------------"
def p_2(_json_str_1):
print "------------------------------------------------------------------------------"
print "Procedimiento 2 json.loads json.dumps"
print "------------------------------------------------------------------------------"
print "##### p_2._json_str_1 ## %s ##" % _json_str_1
import json
_json_1 = json.loads(_json_str_1)
print "##### p_2._json_1 ## %s ##" % _json_1
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print "##### p_2._json_1['a'] ## %s ##" % _json_1['a']
print "##### p_2._json_1['a'][a2] ## %s ##" % _json_1['a']['a2']
print "##### p_2._json_1['b'] ## %s ##" % _json_1['b']
print "##### p_2._json_1['b'][b3] ## %s ##" % _json_1['b']['b3']
print "##### p_2._json_1[u'á'].encode('utf-8') ## %s ##" % _json_1[u'á'].encode('utf-8')
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
_json_str_2 = json.dumps(_json_1)
print "##### p_2._json_str_2 ## %s ##" % _json_str_2
_json_2 = json.loads(_json_str_2)
print "##### p_2._json_2 ## %s ##" % _json_2
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print "##### p_2._json_2['a'] ## %s ##" % _json_2['a']
print "##### p_2._json_2['a'][a2] ## %s ##" % _json_2['a']['a2']
print "##### p_2._json_2['b'] ## %s ##" % _json_2['b']
print "##### p_2._json_2['b'][b3] ## %s ##" % _json_2['b']['b3']
print "##### p_2._json_2[u'á'].encode('utf-8') ## %s ##" % _json_2[u'á'].encode('utf-8')
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
_json_str_3 = json.dumps(_json_2)
print "##### p_2._json_str_3 ## %s ##" % _json_str_3
print "------------------------------------------------------------------------------"
p_1(_json_str)
p_2(_json_str)
Código: Seleccionar todo
------------------------------------------------------------------------------
Procedimiento 1 exec str
------------------------------------------------------------------------------
##### p_1._json_str_1 ## {"a":{"a1":"a 1","a2":"a 2","a3":"a 3"},"b":{"b1":"b 1","b2":"b 2","b3":"b 3"},"á":"á 0"} ##
##### p_1._json_1 ## {'a': {'a1': 'a 1', 'a3': 'a 3', 'a2': 'a 2'}, '\xc3\xa1': '\xc3\xa1 0', 'b': {'b1': 'b 1', 'b2': 'b 2', 'b3': 'b 3'}} ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_1._json_1['a'] ## {'a1': 'a 1', 'a3': 'a 3', 'a2': 'a 2'} ##
##### p_1._json_1['a'][a2] ## a 2 ##
##### p_1._json_1['b'] ## {'b1': 'b 1', 'b2': 'b 2', 'b3': 'b 3'} ##
##### p_1._json_1['b'][b3] ## b 3 ##
##### p_1._json_1['á'] ## á 0 ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_1._json_str_2 ## {'a': {'a1': 'a 1', 'a3': 'a 3', 'a2': 'a 2'}, '\xc3\xa1': '\xc3\xa1 0', 'b': {'b1': 'b 1', 'b2': 'b 2', 'b3': 'b 3'}} ##
##### p_1._json_2 ## {'a': {'a1': 'a 1', 'a3': 'a 3', 'a2': 'a 2'}, '\xc3\xa1': '\xc3\xa1 0', 'b': {'b1': 'b 1', 'b2': 'b 2', 'b3': 'b 3'}} ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_1._json_2['a'] ## {'a1': 'a 1', 'a3': 'a 3', 'a2': 'a 2'} ##
##### p_1._json_2['a'][a2] ## a 2 ##
##### p_1._json_2['b'] ## {'b1': 'b 1', 'b2': 'b 2', 'b3': 'b 3'} ##
##### p_1._json_2['b'][b3] ## b 3 ##
##### p_1._json_2['á'] ## á 0 ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_1._json_str_3 ## {'a': {'a1': 'a 1', 'a3': 'a 3', 'a2': 'a 2'}, '\xc3\xa1': '\xc3\xa1 0', 'b': {'b1': 'b 1', 'b2': 'b 2', 'b3': 'b 3'}} ##
------------------------------------------------------------------------------
Código: Seleccionar todo
------------------------------------------------------------------------------
Procedimiento 2 json.loads json.dumps
------------------------------------------------------------------------------
##### p_2._json_str_1 ## {"a":{"a1":"a 1","a2":"a 2","a3":"a 3"},"b":{"b1":"b 1","b2":"b 2","b3":"b 3"},"á":"á 0"} ##
##### p_2._json_1 ## {u'a': {u'a1': u'a 1', u'a3': u'a 3', u'a2': u'a 2'}, u'\xe1': u'\xe1 0', u'b': {u'b1': u'b 1', u'b2': u'b 2', u'b3': u'b 3'}} ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_2._json_1['a'] ## {u'a1': u'a 1', u'a3': u'a 3', u'a2': u'a 2'} ##
##### p_2._json_1['a'][a2] ## a 2 ##
##### p_2._json_1['b'] ## {u'b1': u'b 1', u'b2': u'b 2', u'b3': u'b 3'} ##
##### p_2._json_1['b'][b3] ## b 3 ##
##### p_2._json_1[u'á'].encode('utf-8') ## á 0 ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_2._json_str_2 ## {"a": {"a1": "a 1", "a3": "a 3", "a2": "a 2"}, "\u00e1": "\u00e1 0", "b": {"b1": "b 1", "b2": "b 2", "b3": "b 3"}} ##
##### p_2._json_2 ## {u'a': {u'a1': u'a 1', u'a3': u'a 3', u'a2': u'a 2'}, u'\xe1': u'\xe1 0', u'b': {u'b1': u'b 1', u'b2': u'b 2', u'b3': u'b 3'}} ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_2._json_2['a'] ## {u'a1': u'a 1', u'a3': u'a 3', u'a2': u'a 2'} ##
##### p_2._json_2['a'][a2] ## a 2 ##
##### p_2._json_2['b'] ## {u'b1': u'b 1', u'b2': u'b 2', u'b3': u'b 3'} ##
##### p_2._json_2['b'][b3] ## b 3 ##
##### p_2._json_2[u'á'].encode('utf-8') ## á 0 ##
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##### p_2._json_str_3 ## {"a": {"a1": "a 1", "a3": "a 3", "a2": "a 2"}, "\u00e1": "\u00e1 0", "b": {"b1": "b 1", "b2": "b 2", "b3": "b 3"}} ##
------------------------------------------------------------------------------
Antes los resultados yo me dacantaría el p_1, más simple y menos engorroso, pero... como veo mucha trajín con el método del p_2 (no sólo en este foro, en muchos foros, webs, blogs,...) es posible que se me escape algo que no veo.
Alguién me puede decir dónde radica la diferencia. Un "Si lo hacen todos o casi todos por algo será" no me vale.