python解析json串与正则匹配对比方法


Posted in Python onDecember 20, 2018

现在有如下格式的json串:

“detail_time”:”2016-03-30 16:00:00”,”device_id”:”123456”,”os”:”Html5Wap”,”session_flow_id”:”1d1819f3-8e19-4597-b50d-ba379adcd8e5”,”user_longitude”:0.0000,”user_latitude”:0.0000,”search_id”:xxx,”search_guid”:-543326548,”search_type”:7,”AAA”:4,”BBB”:-1,”CCC”:[],”DDD”:3,”EEE”:2,”FFF”:1459267200,”GGG”:1459353600,”aaa”:90954603,”bbb”:[{“xxx”:1500848,”x”:1,”bf”:0,”pp”:2,”sroom”:2,”ppp”:108,”cost”:97.2,”coupon”:108,”drr”:108},{“xxx”:1500851,”x”:1,”bf”:0,”pp”:1,”sroom”:2,”ppp”:108,”cost”:97.2,”coupon”:108,”drr”:108},{“xxx”:2336691,”x”:1,”bf”:1,”pp”:1,”sroom”:3,”ppp”:199,”cost”:169.15,”coupon”:191,”drr”:199},{“xxx”:2336692,”x”:1,”bf”:1,”pp”:2,”sroom”:4,”ppp”:102,”cost”:91.8,”coupon”:102,”drr”:102},{“xxx”:1500848,”x”:1,”bf”:0,”pp”:2,”sroom”:3,”ppp”:118,”cost”:106.2,”coupon”:118,”drr”:118},{“xxx”:1500851,”x”:1,”bf”:0,”pp”:1,”sroom”:3,”ppp”:118,”cost”:106.2,”coupon”:118,”drr”:118},{“xxx”:2336693,”x”:1,”bf”:1,”pp”:1,”sroom”:5,”ppp”:199,”cost”:169.15,”coupon”:191,”drr”:199},{“xxx”:2336694,”x”:1,”bf”:1,”pp”:2,”sroom”:6,”ppp”:112,”cost”:100.3,”coupon”:112,”drr”:112},{“xxx”:1500848,”x”:1,”bf”:0,”pp”:2,”sroom”:1,”ppp”:98,”cost”:88.2,”coupon”:98,”drr”:98},{“xxx”:1500851,”x”:1,”bf”:0,”pp”:1,”sroom”:1,”ppp”:98,”cost”:88.2,”coupon”:98,”drr”:98},{“xxx”:2336687,”x”:1,”bf”:1,”pp”:1,”sroom”:1,”ppp”:189,”cost”:160.65,”coupon”:182,”drr”:189},{“xxx”:2336689,”x”:1,”bf”:1,”pp”:2,”sroom”:2,”ppp”:93,”cost”:83.3,”coupon”:93,”drr”:93},{“xxx”:1500848,”x”:1,”bf”:0,”pp”:2,”sroom”:4,”ppp”:128,”cost”:115.2,”coupon”:128,”drr”:128},{“xxx”:1500851,”x”:1,”bf”:0,”pp”:1,”sroom”:4,”ppp”:128,”cost”:115.2,”coupon”:128,”drr”:128},{“xxx”:2336695,”x”:1,”bf”:1,”pp”:1,”sroom”:7,”ppp”:239,”cost”:203.15,”coupon”:230,”drr”:239},{“xxx”:2336696,”x”:1,”bf”:1,”pp”:2,”sroom”:8,”ppp”:121,”cost”:108.8,”coupon”:121,”drr”:121}],”ppp_min”:93.00,”ppp_max”:239.00,”ppp_avg”:134.88,”ppp_med”:118.00,”ppp_min_cost”:83.30,”ppp_min_promotion_type”:-1,”ppp_min_promotion_amount”:-1,”bf_ppp_min”:149.00,”bf_ppp_min_cost”:83.30,”bf_ppp_min_promotion_type”:-1,”bf_ppp_min_promotion_amount”:-1}

现在想拿到device_id的具体值。最简单的方式就是用解析json串的方式得到,代码如下:

#!/usr/bin/env python
#coding:utf-8

import json
import sys
import collections
import time

def t1():
 start = time.clock()
 for line in sys.stdin:
  try:
   line = line.strip()
   decoded = json.loads(line)
   device_id = decoded["device_id"]
   print device_id
  except Exception,ex:
   pass

 end = time.clock()
 print "The cost time is: %f" %(end - start)

t1()

以上代码能顺利完成任务。

不幸的是,现在是大数据时代,数据量嘛,自然都很大。用了一万条数据做测试,耗时达到了惊人的。。。将近10s。

转换下思路,采用正则匹配的方式

#!/usr/bin/env python

import re
import sys
import time

def t1():
 start = time.clock()
 count = 0
 for line in sys.stdin:
  line = line.strip()
  pattern = re.compile("(?:\"device_id\":\")([^\"]+)")
  search = pattern.search(line)
  if search:
   count += 1
   #print search.groups()[0]
 end = time.clock()
 print "The count is: %d" %(count)
 print "The cost time is: %f" %(end - start)

t1()

注意匹配的时候

re.compile("(?:\"device_id\":\")([^\"]+)")

第一个分组表示不捕获,只捕获后面的分组。

同样一万条数据,运行耗时是。。。0.05s。效率提高了多少倍,表示算不过来了。

以上这篇python解析json串与正则匹配对比方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中优化NumPy包使用性能的教程
Apr 23 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python编程中的异常处理教程
Aug 21 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
Python实现简单过滤文本段的方法
May 24 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python定时关机小脚本
Jun 20 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
python字典的元素访问实例详解
Jul 21 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 #Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 #Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 #Python
python 读取竖线分隔符的文本方法
Dec 20 #Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 #Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 #Python
Python 判断奇数偶数的方法
Dec 20 #Python
You might like
第十一节 重载 [11]
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
在python中做正态性检验示例
2019/12/09 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
文秘人员工作职责
2014/01/31 职场文书
公司员工检讨书
2014/02/08 职场文书
工作迟到检讨书
2014/02/21 职场文书
请假条范文大全
2014/04/10 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
我的长征观后感
2015/06/09 职场文书
农村老人去世追悼词
2015/06/23 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技