# -*- coding: utf-8 -*-
import urllib.request
import json
import requests
import pandas as pd
import os
import sys
from io import StringIO
import gzip
import time as turl_auth = "http://****/api-token-auth/" #隐去
url_data ="http://***/stocks/"def get_token():env_dist = os.environusername =env_dist['my_webapi_username']pwd = env_dist['my_webapi_password']data =json.dumps({"username":username,"password":pwd})data = bytes(data,'utf-8')headers = {"Content-Type":"application/json"}html = urllib.request.Request(url_auth,data =data,headers =headers)result = urllib.request.urlopen(html).read().decode('utf-8')tokendict = json.loads(result)token = tokendict['token']return tokendef get_price_json(token,code,start_date,close_date,freq):headers= {"Content-Type": "application/json","Authorization": "JWT " + token}params = {'security':code,'startdate':start_date,'enddate':close_date,'method':'get_price','unit':freq}payload = json.dumps(params)req = requests.get(url_data,data =payload,headers =headers)data = pd.read_json(req.text)return data.to_json() #json字符串->str类型,这个才便于压缩def get_price_df(token,code,start_date,close_date,freq):headers= {"Content-Type": "application/json","Authorization": "JWT " + token}params = {'security':code,'startdate':start_date,'enddate':close_date,'method':'get_price','unit':freq}payload = json.dumps(params)req = requests.get(url_data,data =payload,headers =headers)#print(type(req))data = pd.read_json(req.text)data = {col :data[col][0] for col in data.columns}df = pd.DataFrame(data)return df
def get_data_df_test():token = get_token()code ='000001.XSHE'start_date ='2018-01-01'close_date ='2019-01-01'freq ='1m'data =get_price_df(token,code,start_date,close_date,freq) #dataframereturn datadef get_data_json_test():token = get_token()code ='000001.XSHE'start_date ='2018-01-01'close_date ='2019-01-01'freq ='1m'data =get_price_json(token,code,start_date,close_date,freq) #jsonreturn data

测试一下api的速度

def test():for i in range(5):t0 =t.time()data =get_data_test()print("i: ",i," row: ",data.shape)row =data.shape[0]col =data.shape[1]#print("output 字节数 of data :",sys.getsizeof(data))print("cost time:",t.time()-t0,'s')d =[len(str(data.iloc[i,j]))  for i in range(row) for j in range(col) ]#print("compute bit",sum(d))

测试一下 压缩效率
因为文件大小:dataframe > json > gzip,所以在有dataframe文件的情况下,一般尽可能地转成json,再在json的基础上,压成gzip格式。这样效果都好一些。

选择zlib还是gzip库?还是比较一下好吧。

def json_gzip_test():print("gzip =>compress")data = get_data_json_test()print("json data: ",sys.getsizeof(data))t0 = t.time()    g_data = gzip.compress(data.encode(),compresslevel=6))  # str => data.encode()) ,默认级别为9,这里调为6print("gzip compress cost time:",t.time()-t0,'s')print("gzip compress size: ",sys.getsizeof(g_data))print("=>gzip decompress")t1=t.time()d_data = gzip.decompress(g_data).decode("utf-8") #没有级别之分print("gzip decompress cost time:",t.time()-t1,'s')print("gzip d_data: ",type(d_data),"size: ",sys.getsizeof(d_data))#print(d_data)def json_zlib_test():print("zlib =>compress")data = get_data_json_test()print("json data: ",sys.getsizeof(data))t0 =t.time()comp_data = zlib.compress(data.encode('utf-8'),level=6)  # 编码为UTF-8格式的字节进行压缩,默认级别为6print("zlib compress cost time: ",t.time()-t0,'s')print("zlib compress size: ",sys.getsizeof(comp_data))print("zlib =>decompress")t1= t.time()decom_data = zlib.decompress(comp_data)  # 将压缩的字节进行解压缩,没有级别print("zlib decompress cost time:",t.time()-t1,'s')#print(decom_bytes.decode('utf-8'))  # def json_zlib_byte_test(): #再转一下成byteprint("zlib byte  => compress")data = get_data_json_test()print("json data: ",sys.getsizeof(data))json_bytes = bytes(data, encoding='utf-8') # differentprint("json bytes data: ",sys.getsizeof(json_bytes))t0 =t.time()comp_data = zlib.compress(json_bytes,level=6)  # 编码为UTF-8格式的字节进行压缩print("zlib +byte compress cost time: ",t.time()-t0,'s')print("zlib +byte compress size: ",sys.getsizeof(comp_data))print("zlib +byte =>decompress")t1= t.time()decom_data = zlib.decompress(comp_data)  # 将压缩的字节进行解压缩,没有级别print("zlib +byte  decompress cost time:",t.time()-t1,'s')

对比结果:

json_gzip_test()
gzip =>compress
json data:  8322743
gzip compress cost time: 0.4303134775161743 s
gzip compress size:  1150013
=>gzip decompress
gzip decompress cost time: 0.06250691413879395 s
gzip d_data:  <class 'str'> size:  8322743json_zlib_test()
zlib =>compress
json data:  8322743
zlib compress cost time:  0.4296891689300537 s
zlib compress size:  1170816
zlib =>decompress
zlib decompress cost time: 0.029301881790161133 sjson_zlib_byte_test()
zlib byte =>compress
json data:  8322743
json bytes data:  8322727
zlib +byte compress cost time:  0.42188024520874023 s
zlib +byte compress size:  1170816
zlib +byte =>decompress
zlib +byte decompress cost time: 0.03125166893005371 s

可以看出,zlib和gzip库在压缩级别相同时,压缩和解压效率差不多。需要指出,压缩级别调高后,压缩时间则越久。

python: web api、json 与 gzip、zlib库比较相关推荐

  1. .NET MVC第九章、Web Api Json序列化与反序列化

    .NET MVC第九章.Web Api Json序列化与反序列化 目录 .NET MVC第九章.Web Api Json序列化与反序列化 json数据格式 JSON 语法 返回对象 Json序列化 反 ...

  2. 用 Identity Server 4 (JWKS 端点和 RS256 算法) 来保护 Python web api

    目前正在使用asp.net core 2.0 (主要是web api)做一个项目, 其中一部分功能需要使用js客户端调用python的pandas, 所以需要建立一个python 的 rest api ...

  3. ASP.NET Core 教学 - Web API JSON 序列化设定

    用 JSON 作为 Web API 资料传递格式,并使用 camelCase 作为名称命名规则,几乎已成为通用的标准.ASP.NET Core Web API 也很贴心的把回传物件格式预设为 JSON ...

  4. 【Python实用API】文本转语音库-pyttsx3

    文本到语音转换库 0.描述 1.安装 2.基本用法: 3.进阶 0.描述 pyttsx3是Python中的文本到语音转换库,并且它是离线工作的. pyttsx3特点: 1.离线的 2.可调节:人声选择 ...

  5. python web api 自动化测试_基于Python + requests 的web接口自动化测试框架

    之前采用JMeter进行接口测试,每次给带新人进行培训比较麻烦,干脆用python实现,将代码和用例分离,易于维护. 项目背景 公司的软件采用B/S架构,进行数据存储.分析.管理 工具选择 pytho ...

  6. python压缩视频文件_python使用zlib库压缩图片,使用ffmpeg压缩视频

    # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 2 ...

  7. python web开发第三方库_Python Web开发中常用的第三方库

    Python Web开发中常用的第三方库 TL;DR 经常有朋友问,如果用Python来做Web开发,该选用什么框架?用 Pyramid 开发Web该选用怎样的组合等问题?在这里我将介绍一些Pytho ...

  8. web api json_使用JSON Web令牌对Node ES6 API进行身份验证

    web api json In this guide, we'll be implementing token based authentication in our own node.js A.P. ...

  9. web api json_有关使用JSON Web令牌保护无服务器API的速成班

    web api json What a mouthful of a title. Wouldn't you agree? In this walkthrough you'll learn about ...

  10. 8种提升ASP.NET Web API性能的方法

    英文原文:8 ways to improve ASP.NET Web API performance ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没 ...

最新文章

  1. linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):
  2. 国外17个非常热门的在线备份服务
  3. 智能合约重构社会契约(10)超级账本之跨链Hyperledger Lab
  4. linux下如何使用configure/make/make install命令编译安装卸载程序
  5. Java实现Huffman哈夫曼树(数组实现)
  6. C++对象的动态建立
  7. Pytorch入门-2
  8. python函数回顾:abs()
  9. php 二进制 保存文件,PHP打开一个二进制文件,修改了内容如何再保存回去呢?...
  10. lnmp 1g内存 mysql5.6_LNMP(php5.6+mysql5.6+nginx)
  11. debian常用指令
  12. 阿里云轻量应用服务器部署Node.js+React+MongoDB前后端分离项目
  13. 进阶-第92_es生产集群部署之必须根据自己的集群设置的一些重要参数
  14. Linux 流量控制工具 TC 详解
  15. 制作二十四进制的时钟特效(JavaScript)
  16. python拼音数字输出接口_python: 拼音处理模块
  17. automated creative optimization for e-commerce advertising
  18. 殊荣双至,天翼云边缘计算再获两项大奖!
  19. 攻防世界-warmup详解
  20. Teradata关键字

热门文章

  1. js实现超出一定字数隐藏并用省略号...代替,点击后又可进行展开和收起,
  2. 离开Autodesk,开启新篇章
  3. jquery $(document).ready() 与window.onload的区别(转)
  4. My first essay
  5. webpack插件配置(二)- HtmlWebpackPlugin
  6. 【Gulp自动化构建工具】
  7. Android零基础入门第14节:使用高速Genymotion,跨入火箭时代
  8. Android -----paint cap join 理解 ,paint画笔形状设置
  9. 关于实现servlet中心控制的Front Controller Pattern
  10. 创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址