Binascii模块
通过名字很容易知道这个模块的作用,binary, ascii。两个字母的合成,也就是二进制和ascii的转换模块
下面先介绍下字母的ascii码
a-z的ascii是从97-122. A-Z的ascii是从65-90,,0-9的ascii是48-57
假设字符串为abc,那么对应的ascii码就是97,98,99,对应的十六进制则是61,62,63。b2a_hex就是ascii码的16进制表示。 a
s='abc'
print
binascii.b2a_hex(s)
 
E:\python2.7.11\python.exe E:/py_prj/python_cookbook.py
616263
 
 
s='abc'
ret=binascii.b2a_hex(s)
print binascii.a2b_hex(ret)
a2b_hex则会将16进制的ascii码转换成字符串
E:\python2.7.11\python.exe E:/py_prj/python_cookbook.py
abc
 
struct模块
这个模块和C语言中的struct结构基本是一个原理。如下的这个结构体,有三个字段:一个整型的type,一个字符类型的str,一个浮点数的value.
Struct
{
  int type;
  char *str;
  float value; 
}
如果我们要封装在内存中进行传输,只需要memcpy就可以实现了
那么在python中的struct模块就是起到类似的作用的。代码如下。我们同样复用上面的结构体,元组里面分别是int, string,float。Struct('I3sf')其实是表明数据的结构.这里i代表int,s代表string,f代表float。这里有3s代表3个字符
values=(1,'abc',2.7)
s=Struct('I3sf')
print s.size
packed_data=s.pack(*values)
print s.unpack(packed_data)
 
执行结果如下: size为12个字节,因为int和float分别占据4个字节,s占据一个字节,3s则是3个字节。但是从下面的运行结果来看。Size的大小是12字节,和4+3+4=11不符合。这是由于字节对齐的原则。f是4个字节。起始地址需要是4的倍数。因此在3s后面填充了一个字节。因此是12个字节。
E:\python2.7.11\python.exe E:/py_prj/python_cookbook.py
12
(1, 'abc', 2.700000047683716)
 
如果改成s=Struct('if3s')。这样就不存在字节对齐的原则,因此大小就是11字节。
格式字符的意义以及大小参加下表

从上面的例子可以看到pack和unpack分别是打包和解包的功能。如果在struct中设置的包格式不对,解包的时候会如何呢。比如代码改成如下,struct为if3s,也就是整数,浮点数,字符
values=(1,'abc',2.7)
s=Struct('if3s')
print s.size
packed_data=s.pack(*values)
print s.unpack(packed_data)
会报下面的错误,提示解析到第二个数也就是abc的时候不是一个浮点数。因此struct中格式的顺序一定要准确。
Traceback (most recent call last):
  File "E:/py_prj/python_cookbook.py", line 297, in <module>
    packed_data=s.pack(*values)
struct.error: required argument is not a float
如果代码继续改成如下的形式,isf。也就是中间只有1个字符
values=(1,'abc',2.7)
s=Struct('isf')
print s.size
packed_data=s.pack(*values)
print s.unpack(packed_data)
结果如下,可以看到只有a被解析出来了,因为格式中只有1个字节。因此只解析了一个字节的数据。
E:\python2.7.11\python.exe E:/py_prj/python_cookbook.py
12
(1, 'a', 2.700000047683716)
 
另外补充一点对于底层来说,字节的顺序分为大端序(高端在前)和小端序(低端在前)。Struct('<isf')代表小端序,Struct('>isf')代表大端序。
 
												

python cookbook第三版学习笔记八:解析码流的更多相关文章

  1. python cookbook第三版学习笔记十:类和对象(一)

    类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair:     def __init__(self,x,y):         self.x=x         self. ...

  2. python cookbook第三版学习笔记十八:可由用户修改的装饰器

    定义一个属性可由用户修改的装饰器: 在前面的介绍中使用装饰器来包装函数,这一章来介绍下如何让用户调整装饰器的属性. 首先来看下代码: from functools import wraps,parti ...

  3. python cookbook第三版学习笔记六:迭代器与生成器

    假如我们有一个列表 items=[1,2,3].我们要遍历这个列表我们会用下面的方式 For i in items:   Print i 首先介绍几个概念:容器,可迭代对象,迭代器 容器是一种存储数据 ...

  4. python cookbook第三版学习笔记 一

    数据结构 假设有M个元素的列表,需要从中分解出N个对象,N<M,这会导致分解的值过多的异常.如下: record=['zhf','zhf@163.com','775-555-1212','847 ...

  5. python cookbook第三版学习笔记十三:类和对象(三)描述器

    __get__以及__set__:假设T是一个类,t是他的实例,d是它的一个描述器属性.读取属性的时候T.d返回的是d.__get__(None,T),t.d返回的是d.__get__(t,T).说法 ...

  6. python cookbook第三版学习笔记二十:可自定义属性的装饰器

    在开始本节之前,首先介绍下偏函数partial.首先借助help来看下partial的定义 首先来说下第一行解释的意思: partial 一共有三个部分: (1)第一部分也就是第一个参数,是一个函数, ...

  7. python cookbook第三版学习笔记十六:抽象基类

    假设一个工程中有多个类,每个类都通过__init__来初始化参数.但是可能有很多高度重复且样式相同的__init__.为了减少代码.我们可以将初始化数据结构的步骤归纳到一个单独的__init__函数中 ...

  8. python cookbook第三版学习笔记十五:property和描述

    8.5 私有属性: 在python中,如果想将私有数据封装到类的实例上,有两种方法:1 单下划线.2 双下划线 1 单下划线一般认为是内部实现,但是如果想从外部访问的话也是可以的 2 双下划线是则无法 ...

  9. python cookbook第三版学习笔记七:python解析csv,json,xml文件

    CSV文件读取: Csv文件格式如下:分别有2行三列. 访问代码如下: f=open(r'E:\py_prj\test.csv','rb') f_csv=csv.reader(f) for f in ...

随机推荐

  1. NOIP2016模拟赛三 Problem C: 不虚就是要AK

    题目大意 给定一棵带有边权的树, 问你在树上随机选两个点, 它们最短路径上的边权之和为\(4\)的倍数的概率为多少. Solution 树分治. 没什么好讲的. #include <cstdio ...

  2. linux grep 搜索查找

    查找关键字在哪些文件夹中的哪些文件中出现(只列出文件名称): grep -l 15386257298 */* 查找关键字在哪些文件夹中的哪些文件中出现(列出文件名称+关键字): grep -o 153 ...

  3. golang实现dns域名解析(二)

    上一节已经讲了如何构造dns请求包的情况,这一节接着上一节的情况,谈谈dns查询报文中的问题部分.问题部分中每个问题的格式如下: 查询名是要查找的名字,它是一个或者多个标识符的序列.每个标识符以首字母 ...

  4. linux调整缓存写入磁盘的时间,减少磁盘爆掉的可能性

    缓存数据存入磁盘的最长时间,如果这段时间写不完,就会报异常停止写,这样缓存数据会不断积累,导致内存爆掉. echo 0 > /proc/sys/kernel/hung_task_timeout_ ...

  5. cocos2d-x 学习记录

    不积跬步,无以至千里.不积小流,无以成江海. 開始学习cocos2d-x ,路漫漫其修远兮.加油!

  6. fiddler使用心得记录

    fiddler是一款非常好用的软件,通过监听8888端口来修改http,https等请求和响应,是抓包神器. 最近正在学习如何使用,现在记录下学习的一些技巧 如何支持https 点击菜单项tools, ...

  7. fastjson设置生成的json属性的顺序

    目标JSON顺序: {,,} 1.url2.w3.h4.s 如果使用默认情况生成,则顺序为: w,h,s,url 在fastJson中,可以使用@JSONField来指定属性顺序(需要1.1.42以上 ...

  8. ElasticSearch搜索term和terms的区别

    今天同事使用ES查询印地语的文章.发现查询报错,查询语句和错误信息如下: 查询语句:{    "query":{        "bool":{         ...

  9. git pull“No remote repository specified”解决方法

    git pull“No remote repository specified”解决方法 学习了:http://www.paopaoche.net/jiaocheng/77226.html 修改“.g ...

  10. mycat 分页慢原理解析、mycat跨事务解惑、mycat注解调用存储过程分析

    1结合Mycat日志,分析select * from travelrecord order by id limit100000,100 的运行过程,解释下当limit M,N中的M非常大的情况下.为什 ...