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的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
Python根据成绩分析系统浅析
Feb 11 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
对Python中画图时候的线类型详解
Jul 07 Python
Python3 元组tuple入门基础
Feb 09 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
Python与C++中梯度方向直方图的实现
Mar 17 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
javascript parseInt 大改造
2009/09/27 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
简单的js表单验证函数
2013/10/28 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
详解angular element()方法使用
2017/04/08 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
Python  连接字符串(join %)
2008/09/06 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
党性教育心得体会
2014/09/03 职场文书
个人原因辞职信模板
2015/05/13 职场文书
python基础详解之if循环语句
2021/04/24 Python