您的位置:首页 > 编程语言 > Python开发

Python之学习笔记(常用内建模块)

2015-05-31 12:43 621 查看
常用内建模块
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!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: