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深入学习之内存管理
Aug 31 Python
python 连接sqlite及简单操作
Jun 30 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
Django实现学员管理系统
Feb 26 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
使用Python将语音转换为文本的方法
Aug 10 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 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/12/30 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
vue中input的v-model清空操作
2019/09/06 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
python定时器使用示例分享
2014/02/16 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
简单了解python模块概念
2018/01/11 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Python底层封装实现方法详解
2020/01/22 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
测量工程专业求职信
2014/02/24 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
企业消防安全责任书
2014/07/23 职场文书
收款委托书
2014/10/14 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
村干部任职承诺书
2015/01/21 职场文书
python 实现图片特效处理
2022/04/03 Python