Python之学习笔记(常用内建模块)
2015-05-31 12:43
621 查看
常用内建模块
collection
base64
struct
collection
base64
struct
常用内建模块
collection
[code]# -*- coding: utf-8 -*- from collections import namedtuple,deque,defaultdict,OrderedDict from collections import Counter ### nametuple Point = namedtuple('Point1', ['x', 'y']) # 括号里面的名字 p = Point(1, 2) print p.x print p.y print isinstance(p, Point) # namedtuple('名称', [属性list]): Circle = namedtuple('Circle', ['x', 'y', 'r']) ### deque # deque除了实现list的append()和pop()外,还支持appendleft()和popleft(), # 这样就可以非常高效地往头部添加或删除元素。 q = deque(['a', 'b', 'c']) q.append('x') q.appendleft('y') print q ### defauldict # 引用的key不存在,就会有key error dd = defaultdict(lambda: 'N/A') dd['key1'] = 'abc' print dd['key1'] # key1存在 print dd['key2'] # key2不存在,返回默认值 ### OrderedDict d = dict([('a', 1), ('b', 2), ('c', 3)]) print d # dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2} od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print od # OrderedDict的Key是有序的 # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) # 用OrderedDict实现FIFO class LastUpdatedOrderedDict(OrderedDict): def __init__(self, capacity): super(LastUpdatedOrderedDict, self).__init__() self._capacity = capacity def __setitem__(self, key, value): containsKey = 1 if key in self else 0 if len(self) - containsKey >= self._capacity: last = self.popitem(last=False) print 'remove:', last if containsKey: del self[key] print 'set:', (key, value) else: print 'add:', (key, value) OrderedDict.__setitem__(self, key, value) ### Counter # 用来记录比如字符出现的次数,其实是一种dict c = Counter() for ch in 'programming': c[ch] = c[ch] + 1 # print c[ch] # print ch #print c c1 = Counter('programming') print c1['m']
base64
[code]# -*- coding: utf-8 -*- import base64 ''' 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码, 因为二进制文件包含很多无法显示和打印的字符, 所以,如果要让记事本这样的文本处理软件能处理二进制数据, 就需要一个二进制到字符串的转换方法。 Base64是一种最常见的二进制编码方法。 对二进制数据进行处理,每3个字节一组, 一共是3x8=24bit,划为4组,每组正好6个bit: ''' print base64.b64encode('binary\x00string') # 'YmluYXJ5AHN0cmluZw==' print base64.b64decode('YmluYXJ5AHN0cmluZw==') # 由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_: print base64.b64encode('i\xb7\x1d\xfb\xef\xff') # 'abcd++//' print base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff') # 'abcd--__' print base64.urlsafe_b64decode('abcd--__') # 'i\xb7\x1d\xfb\xef\xff' # 去掉=后怎么解码呢?因为Base64是把3个字节变为4个字节, # 所以,Base64编码的长度永远是4的倍数, # 因此,需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了。 # 能处理去掉=的base64解码函数 def b64decode_self(str): return base64.b64decode(str+'='*(4-len(str)%4)) print b64decode_self('YWJjZA')
struct
[code]# -*- coding: utf-8 -*- __anthor__ = 'Chen Yu' import struct # Python提供了一个struct模块来解决str和其他二进制数据类型的转换 # struct的pack函数把任意数据类型变成字符串 # pack的第一个参数是处理指令,'>I'的意思是: # >表示字节顺序是big-endian,也就是网络序, # I表示4字节无符号整数。后面的参数个数要和处理指令一致 struct.pack('>I', 10240099) # 根据>IH的说明,后面的str依次变为I:4字节无符号整数和H:2字节无符号整数 # https://docs.python.org/2/library/struct.html#format-characters # s = '\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00' print struct.unpack('>IH', '\xf0\xf0\xf0\xf0\x80\x80') s = '\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00' print struct.unpack('<ccIIIIIIHH',s) # 判断文件中是否有位图 def bmpck(picx): with open(picx,'rb') as p: pp = struct.unpack('<ccIIIIIIHH',p.read(30)) if pp[0] == 'B': if pp[1] == 'M': print "%s is a Windows bitmap" % picx print "This bitmap weight:%s high:%s ,and coloreMode is %s!"%(pp[6],pp[7],pp[9]) elif pp[1] == 'A': print "%s is a OS/2 bitmap" % picx print "This bitmap weight:%s high:%s ,and coloreMode is %s!"%(pp[6],pp[7],pp[9]) else: print "This file not a bitmap!"
相关文章推荐
- 替代文本中的字符-python
- 安装 python2.7.8
- python 数据
- python str.translate()函数用法
- Python 3 -Functions
- python Asyncore.dispatcher 理解
- Python开发安装的一些常用模块
- python第三方库系列之十六--建立最简单的web服务器
- Python装饰器学习笔记
- 从python协程理解tornado异步
- python&nbsp;多线程服务器示例
- Python yield 用法
- Python通过文件头来判断文件的真实类型
- 在pythonanywhere上搭建django程序(Virtualenv+python2.7+django1.7+)
- python学习笔记之――函数模块
- 【python】数据库操作
- Python删除列表重复数据以及效率问题
- 从底层理解Python的执行
- win32系统 python3.4 安装matplotlib
- Python进行中文注释