Python下各种格式的编码效率初步测试(JSON,BSON, bz2, lzma,msgpack)

# -*- coding:utf-8 -*-
‘‘‘
测试证明BSON和JSON所需要的字节数相差无几,甚至更多。
压缩算法的效果取决于其冗余程度。
‘‘‘
from __future__ import division
import collections  # From Python standard library.

import datetime
test = {"name":"lemo", "age":12,
        "address":{
            "city":"suzhou",
            "country":"china",
            "code":215000} ,
            #"timestamp":datetime.datetime.now(),
    "scores":[{"name":"english","grade":3.0,"code":215000},
              {"name":"chinese","grade":2.0,"code":215000},
              {"name":"kerea","grade":3.0,"code":232000},
              {"name":"france","grade":4.0,"code":235000},
              {"name":"japanese","grade":4.0,"code":235000},
              {"name":"kerea","grade":4.0,"code":235000},
              {"name":"kerea","grade":4.0,"code":235300}
    ]
}

#import bson
#from bson.codec_options import CodecOptions
#data = bson.BSON.encode(test)
#print ("bson:", len(data) )
#decoded_doc = bson.BSON.decode(data)
import json
json_str = json.dumps( test )
print ("json:",len(json_str) )
### 
import bz2
compressor = bz2.BZ2Compressor()
compressor.compress(json_str.encode(‘utf-8‘)) 
bz2_str = compressor.flush() 
print ("bz2:",len(bz2_str),  len(bz2_str)/len(json_str) )

import sys
if sys.version_info.major*1000+ sys.version_info.minor>=3003:
    import lzma
    lzc = lzma.LZMACompressor()
    out1 = lzc.compress(json_str.encode(‘utf-8‘) )
    out2 = lzc.flush()
    # Concatenate all the partial results:
    result = b"".join([out1, out2])
    print ("lzma:",len(result),  len(result)/len(json_str) )
    lzd = lzma.LZMADecompressor()
    dec_str = lzd.decompress(result )
    assert json_str.encode(‘utf-8‘) == dec_str

### msgpack
import datetime
import msgpack
#useful_dict = {
    #"id": 1,
    #"created": datetime.datetime.now(),
#}

def decode_datetime(obj):
    if b‘__datetime__‘ in obj:
        obj = datetime.datetime.strptime(obj["as_str"], "%Y%m%dT%H:%M:%S.%f")
    return obj

def encode_datetime(obj):
    if isinstance(obj, datetime.datetime):
        return {‘__datetime__‘: True, ‘as_str‘: obj.strftime("%Y%m%dT%H:%M:%S.%f")}
    return obj

packed_dict = msgpack.packb(test, default=encode_datetime)
print ("msgpack:",len(packed_dict),  len(packed_dict)/len(json_str) )
#compressor = bz2.BZ2Compressor(compresslevel=1)
#compressor.compress(packed_dict) 
#bz2_str = compressor.flush() 
#print ("msgpack_bz2:",len(bz2_str),  len(bz2_str)/len(json_str) )

this_dict_again = msgpack.unpackb(packed_dict, object_hook=decode_datetime)
时间: 2024-12-25 07:30:49

Python下各种格式的编码效率初步测试(JSON,BSON, bz2, lzma,msgpack)的相关文章

python 下字符串格式时间比较

举例: 1 #-*-coding=utf-8-*- 2 __author__='zhongtang' 3 4 5 import time 6 strtime1='20160518010101' 7 strtime2='20160518020101' 8 9 #字符串变成时间数据结构 10 localtime1=time.strptime(strtime1,'%Y%m%d%H%M%S') 11 localtime2=time.strptime(strtime2,'%Y%m%d%H%M%S') 12

[Misc] python 开发vim 插件初步测试

[Misc] python 开发vim 插件初步测试 今日雨夹雪, 晚上闲来没事突然想了解下用python试试VIM插件开发. 于是写了个初步测试. 总体来说相当简单, 几个相当设置语法后, import vim 后就进入python世界了. (相当操作命令vim内:help py了解更多) 测试代码, 放到.vim/plugin目录下, *.vim vim内: Helloworld 和 : Helloname abeen 调用测试方法. 测试如下: 1 " vim plugin test 2

一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 @for&ever 2010-07-03 功能: 获取指定目录下面符合一定规则的文件名称和文件修改时间,并保存到指定的文件中 脚本如下: #!/usr/bin/env python# -*- coding: utf-8 -*- '''Created on 2010-7-2 @author: fore

Python下Json和Msgpack序列化比较

Python下Json和Msgpack序列化比较  最近用Python时,遇到了序列化对象的问题,传统的json和新型序列化工具包msgpack都有涉及,于是做一个简单的总结: 通俗的讲:序列化:将对象信息转化为可以存储或传输的形式:反序列化:把这个存储的内容还原成对象. json就不用多做解释了,是一种轻量级的数据交换格式,广泛应用于web开发中.当然也是将对象序列化成符合json规范的格式.网上有一堆堆资料. 官网:http://www.json.org msgpack就有意思了,先看下官方

python学习笔记(threading性能压力测试)

又是新的一周 延续上周的进度 关于多进程的学习 今天实践下 初步设计的接口性能压力测试代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 4 import threading 5 import requests 6 import time 7 import re 8 from time import sleep 9 10 # -------接口性能测试配置------- 11 method = "post" 12 # 接口

Python解压缩ZIP格式

转自:http://blog.csdn.net/linux__kernel/article/details/8271326 很多人在Google上不停的找合适自己的压缩,殊不知Py的压缩很不错.可以试试.当然C#,Java的压缩也有第三方的类.Py有很多美名:数学理论强大,数据结构高级等等,关于压缩算法当然用Py更加简单易用,达到目的才是最重要的. Python压缩ZIP文件: import zipfile f = zipfile.ZipFile(target,'w',zipfile.ZIP_D

python 下的crc16计算模块 XCRC16

又一次突然遇到用python处理modbus通信而需要crc16校验的问题,当时在百度上没找到,在google上找到了一个外国人开发的python包,结果安装好了之后发现校验的不正确(可能是使用的模式串不一样,xcrc16的模式串为0xa001),后来事情过去了就写了一个包弥补一下,xcrc16 的意思是 extend crc->xcrc ,也是我的第一个开源项目,如果大家使用程序遇到什么情况也麻烦通知我下,我会第一时间进行维护. 介绍: xcrc16 模块是为了解决crc16校验问题而写 目前

Python下探究随机数的产生方法

资源下载 #本文PDF版下载 Python下探究随机数的产生方法(或者单击我博客园右上角的github小标,找到lab102的W7目录下即可) #本文代码下载 几种随机数算法集合(和下文出现过的相同) 前言 我们对于随机数肯定不会陌生,随机数早已成为了我们经常要用到的一个方法,比如用于密码加密,数据生成,蒙特卡洛算法等等都需要随机数的参与.那么我们的电脑是怎么才能够产生随机数的呢?是电脑自己的物理存在还是依靠算法?它到底是如何工作的呢?所以我也对这些问题有着好奇心,所以找到了许多资料学习了一下,

linux下转格式函数iconv段错误

今天将windows代码移植到Linux下,其中用到了Unicode转char的函数,被坑了一会,相关函数及编码格式,Linux与windows不同,有几点需要注意: 1.wchar_t 在Linux下占用4个字节,在windows下占2个字节: 2.Linux默认的文本编码方式是UTF-8:Linux终端汉字显示的设置方式:vi /etc/sysconfig/i18n: 设置LANG="en_US.UTF-8"或者LANG="zh_CN.UTF-8": 3.ico