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 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
Python 装饰器深入理解
Mar 16 Python
django反向解析和正向解析的方式
Jun 05 Python
Pycharm如何打断点的方法步骤
Jun 13 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
关于sys.stdout和print的区别详解
Dec 05 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
浅谈Python程序的错误:变量未定义
Jun 02 Python
python 实现图像快速替换某种颜色
Jun 04 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
python实现学员管理系统(面向对象版)
Jun 05 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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 date与gmdate的获取日期的区别
2010/02/08 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
python实现ip地址的包含关系判断
2020/02/07 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
大码女装:Ulla Popken
2019/08/06 全球购物
医院总经理岗位职责
2014/02/04 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
小学同学聚会感言
2015/07/30 职场文书
会议主持词通用版
2019/04/02 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL