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 七种邮件内容发送方法实例
Apr 22 Python
python计算牛顿迭代多项式实例分析
May 07 Python
python设计模式大全
Jun 27 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
python版学生管理系统
Jan 10 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
Django Rest framework之认证的实现代码
Dec 17 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
Python多线程通信queue队列用法实例分析
Mar 24 Python
用python进行视频剪辑
Nov 02 Python
Django数据统计功能count()的使用
Nov 30 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手册及PHP编程标准
2006/12/17 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
Python入门篇之文件
2014/10/20 Python
十个Python程序员易犯的错误
2015/12/15 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
教职工代表大会主持词
2014/04/01 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
Apache自带的ab压力测试工具的实现
2022/07/23 Servers