Python关于eval与json在字典转换方面的性能比较
2024-10-17 02:38:42
背景介绍
因为python中有eval()方法,可以很方便的将一些字符串类型与字典等数据结构之间进行转换, 所以公司的数据处理同事在保存一些特殊数据时就直接将字典的字符串保存在数据库中。
在程序中读取该字段,再使用eval()将其转成字典进行处理。 由于这样比较方便,节省了解析的成本,所以广泛被公司内部采用。
后来,随着公司业务发展,这类型的字段长度也随之变长,由原先的几十上百字节到现在的百万字节(跨度很大,既定事实),发现处理程序的处理速度也降了下来,经过一系列的性能
定位发现,eval方法在转换大长度的字符串时耗时严重。
分析算法
使用相同的数据结构,对比eval与json转字符串转字典方面的性能。
代码
#coding:utf8 import sys,json
from time import time a = {} for i in range(int(sys.argv[1])):
a[i+1914246144] = (24, 31620, 3.874021, 870569, 700552) #转成字符串
dict_str = repr(a) t1 = time() d = eval(dict_str) t2 = time()
print "eval cost time is %f." % (t2 -t1) #转成json类型的字符串
dict_json = json.dumps(a) t1 = time() d = json.loads(dict_json) t2 = time() print "json cost time is %f." % (t2 -t1)
测试结果:
注:第一列代表字典的items数量,后面的单位为秒。
基本上可以得出结论,在长字符串转换字典方面,eval比json的方法,慢7~9倍左右。
另外,根据笔者查询资料,eval一般是执行字符串类型的python语句使用,而且也会有一些风险,应该尽量避免滥用,有跟我类似苦恼的朋友,希望看完本篇介绍能有点小小的收获吧。
一般外部数据输入的格式,尽量使用通用的数据格式,如 xml、json等,方便语言扩展,妙处多多。
最新文章
- python-学习笔记1-面向对象编程
- python super
- Manor
- 201521123066《Java程序设计》第七周学习总结
- JavaSE----基础语法(方法)
- EditTable-V1.0--续集
- Object.prototype.toString.call()方法浅谈
- 黄文俊:Serverless小程序后端技术分享
- Asp.Net Core SignalR 与微信小程序交互笔记
- eclipse 下载安装单元测试log4j的配置与搭建
- lnmp环境一键安装
- php年会抽奖
- JSON平铺功能的实现(JS操作JSON数据)
- git报错fatal: I don't handle protocol '​https'处理
- 006.SMB之用户管理
- Android之HttpPost与HttpGet使用
- Xilinx SD controller
- 安装wamp 缺少msvcr100.dll
- jQuery -&;gt; filter使用方法
- DataSnap 连接池