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的Twisted框架编写非阻塞程序的代码示例
May 25 Python
python实现外卖信息管理系统
Jan 11 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Python参数类型以及常见的坑详解
Jul 08 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
Python实现扫码工具的示例代码
Oct 09 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python 统计代码耗时的几种方法分享
Apr 02 Python
python绘制箱型图
Apr 27 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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
获取PHP警告错误信息的解决方法
2013/06/03 PHP
yii的CURD操作实例详解
2014/12/04 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
区分python中的进程与线程
2020/08/13 Python
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
自动化专业毕业生自荐信
2013/11/01 职场文书
主管职责范文
2013/11/09 职场文书
网站设计师的岗位职责
2013/11/21 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
关于工资低的辞职信
2014/01/14 职场文书
大学生求职信
2014/06/17 职场文书
体育委员竞选稿
2015/11/21 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书