milang(小语)
caimouse
在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。
展开
-
4. 二进制数据处理库
二进制处理库主要是针对二进制数据的操作和使用,也有介绍一些特定的操作,比如像文件格式和网络协议。在前面也介绍了文本处理库,其实有一部分功能也是能处理二进制数据的,比如正则表达式re,或者是difflib比较库对数据进行处理。此外,在python内部也提供了bytes/bytearray/memoryview等数据类型进行操作。4.1 struct--二进制数据打包和解包本模块主要对python的数原创 2015-10-28 20:50:15 · 2864 阅读 · 0 评论 -
4.2.4 Python特有编码
4.2.4 Python特有编码Python还内置一些特有的编码集。4.2.4.1 文本编码Python提供了下面从字符串到字节数组的编码,以及字节数据到字符串的解码:CodecAliasesPurposeidna Implements RFC 3490, see also encodings.idna. Only errors='strict' is supported.mbcsdbcsWind原创 2015-11-14 17:19:47 · 2732 阅读 · 0 评论 -
5. 数据类型库
5. 数据类型库本库主要描述了不同数据类型的使用,比如日期类型、时间类型、固定类型数组、堆队列、同步队列和集合。Python也提供了很多内置数据类型,比如dict、list、set和frozenset、tuple。以及str类支持Unicode字符串,bytes类保存二进制数据。下面来学习数据类型库提供更多的数据类型。5.1 datetime--基本日期和时间类型本模块datetime提供了对日期原创 2015-11-15 09:53:33 · 1998 阅读 · 0 评论 -
4.1.2 格式字符串
格式字符串是用来指定打包和解包时对数据排列的机制。因此在内部定义了一系列格式字符,通过这些字符来表示数据的类型,另外也定义一些字符来表示数据放入顺序、大小和对齐的方式。4.1.2.1 字节顺序、大小和对齐方式默认情况下,C语言定义一个结构是按原始格式保存的,包括字节放入顺序,合适填充空白字节,主要根据C语言编译器来决定。在Python语言里,需要在格式字符串前面使用一个字符来表示结构里保存字节的顺原创 2015-10-29 22:28:04 · 1797 阅读 · 1 评论 -
5.1.3 date对象
类date对象表示一个理想的日历里的一天日期(年,月和日)。class datetime.date(year, month, day)在构造对象时所有参数都必须输入。所有参数都采用整数表示,并且只能在下面范围之间:l MINYEAR l 1 l 1 小于给出年和月的总天数如果参数超出范围,就会抛出异常ValueError。 classmethod date.today() 返回当前日期对象,相当于原创 2015-11-20 22:23:25 · 2203 阅读 · 0 评论 -
4.2 codecs--Codec注册管理和基类
本模块定义了Python标准codecs(编码和解码)的基类,也提供了对Python内部codec的注册,管理和数据处理过程。大部分标准的codecs都是文本编解码器,主要是用来把文本怎么样编码成字节方式。不过也有一些codecs是用来从文本到文本的编码方式,或者从字节到字节的编码方式。当然也可以根据基类来定制codecs,可以任意间的数据类型进行转换,只要注意在某些codecs是限制在文本编解码原创 2015-10-31 09:26:38 · 2396 阅读 · 5 评论 -
4.1.2.3 格式字符例子
采用小端模式进行解包,并赋值例子:#python 3.4.3import structrecord = b'raymond \x32\x12\x08\x01\x08'name, serialnum, school, gradelevel = struct.unpack('<10sHHb', record)print(name, serialnum, school, gradeleve原创 2015-10-30 21:59:50 · 1861 阅读 · 2 评论 -
4.2 codecs--Codec注册管理和基类(2)
codecs.register(search_function) 注册一个codec的搜索函数。搜索函数要求能输入一个参数,编码器的名称以小写字母命名,如果成功找到返回CodecInfo对象,否则返回None。例子:def add_cp65001_codec(): try: codecs.lookup('cp65001') except LookupError: codecs.re原创 2015-10-31 20:58:26 · 2863 阅读 · 3 评论 -
5.1.4 datetime对象
类datetime创建的对象包括了日期和时间相关信息。class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)构造一个datetime对象,需要输入年、月、日三个参数,其它参数都是可选。输入的参数应满足下面的范围:l MINYEAR l 1 l 1 小于指定月份原创 2015-11-22 09:00:44 · 2094 阅读 · 0 评论 -
4.2.1 Codec基类
在codecs模块里定义了与codec对象进行交互的接口,也可以使用它作为其它编解码的基类。 在Python里要求codec对象需要有四个接口:无状态的encoder,无状态的decoder,StreamReader和StreamWriter。而StreamReader和StreamWriter通常是由无状态的encoder/decoder通过文件协议来实现。同时codec对象还需要处理在编码和解原创 2015-11-01 09:33:49 · 3044 阅读 · 0 评论 -
5.1.2 timedelta对象
timedelta对象是用来表示时间的区间,主要是两个日期或时间之差。class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 所有输入参数都是可选的,默认都设置为0。参数可以是整数或浮点数,可以正数,也可以是负数。在这个类里直接保存三个变量:天数原创 2015-11-17 21:05:39 · 7061 阅读 · 0 评论 -
5.2 calendar--通用日期的相关函数(1)
本模块calendar提供了通用日期的相关操作函数。缺省情况步,星期一作为一周的第一天,星期天作为一周的最后一天。可以通过函数setfirstweekday()函数可以设置一周的第一天,比如参数输入6就是是星期天作为第一天了。 class calendar.Calendar(firstweekday=0) 创建一个Calendar对象。 参数firstweekday是一个整数,指明一周开始的第一天原创 2015-12-11 22:30:28 · 2830 阅读 · 0 评论 -
5.2 calendar--通用日期的相关函数(2)
monthdays2calendar(year, month)返回指定年和月的所有日期,把日期和第几周组成元组。例子:#python 3.4import calendar cal = calendar.Calendar(0)for i in cal.monthdays2calendar(2015, 11): print(i) print(';')结果输出如下:[(0, 0), (0,原创 2015-12-12 19:25:58 · 2037 阅读 · 0 评论 -
5.2 calendar--通用日期的相关函数(3)
prmonth(theyear, themonth, w=0, l=0) 打印指定年和月的日历。格式与formatmonth()函数一样。例子:#python 3.4import calendar cal = calendar.TextCalendar(0)cal.prmonth(2015, 11)cal.prmonth(2015, 11, w = 5)cal.prmonth(2015, 11,原创 2015-12-13 19:17:53 · 2225 阅读 · 0 评论 -
5.1.5 time对象
类time创建的对象表示本地时间,与任何特别日期没有关系。可以通过时区tzinfo来调整时间。class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) 所有参数都是可选的。除了tzinfo对象,其它参数都是整数表示。其中参数范围如下:l 0 l 0 l 0 l 0 当参数范围超出这些范围时,就会抛出异常V原创 2015-11-25 21:44:05 · 1909 阅读 · 0 评论 -
5.1.6 tzinfo对象
类tzinfo是抽象基类,不能直接实例化。因此需要创建一个派生类,并且至少实现三个方法,才可以使用。在timezone里已经实现北美的EST和EDT时区的时间。tzinfo的实例可以传送给datetime对象和time对象,以便指定特定的时区。tzinfo对象主要用来表示与UTC时间差距,以及时区的名称,夏时制的相对时间。一个派生类应实现下面的方法:tzinfo.utcoffset(dt) 返回当原创 2015-11-28 10:30:34 · 3043 阅读 · 2 评论 -
5.3.7 UserDict对象
用户自定义字典类UserDict,它是封装了一个字典类dict。主要使用来拷贝一个字典的数据,而不是共享同一份数据。class collections.UserDict([initialdata]) 本类主要模拟一个字典。在类成员data里拷贝了一份字典数据,如果没有提供初始数据,就保存为空的方式。UserDict类实例提供下面的属性:data用来保存字典的成员变量。 例子:#python 3.4原创 2016-01-16 08:32:10 · 2493 阅读 · 0 评论 -
5.4 heapq--堆队列算法
本模块实现了堆队列算法,也叫作优先级队列算法。堆队列是一棵二叉树,并且拥有这样特点,它的父节点的值小于等于任何它的子节点的值,如果采用数组array实现,可以把它们的关系表示为:heap[k] 和 heap[k] ,对于所有k值都成立,k值从0开始计算。作为比较,可以认为不存的元素是无穷大的。堆队列有一个比较重要的特性,它的最小值的元素就是在根:heap[0]。 下面的API与教科书上堆算法有两点原创 2016-01-16 18:49:21 · 4457 阅读 · 0 评论 -
5.4.1 使用堆算法实现优级队列
一个优先级队列通常是使用堆算法来实现,实现优先级队列主要困难有以下几点:1)排序的稳定性:怎么样实现两个优级一样的任务时返回最先添加的任务?2)在元组比较里,如果(优先级,任务)对相同时,就没有比较的顺序了。3)如果一个任务的优先级改变了,你怎么样把它移动到堆的一个新位置上?4)当任务删除时,你怎么样发现它是删除的,并且把它从堆队列里删除?为了解决前面两个问题,采用三个元素的列表来实现,这个列表包原创 2016-01-17 10:28:42 · 1992 阅读 · 0 评论 -
5.2 calendar--通用日期的相关函数(4)
calendar类提供下面的函数来判断日历相关的内容:calendar.setfirstweekday(weekday) 设置一周里那一天作为第一天。0是表示星期一,6是表示星期天。例子:#python 3.4import calendar print(calendar.firstweekday())calendar.setfirstweekday(calendar.SUNDAY)print(ca原创 2015-12-19 20:57:31 · 4394 阅读 · 0 评论 -
5.3.1 ChainMap对象
ChainMap类用来管理多个映射对象,以便把所有映射对象当作一个对象单元来处理。这样做的好处是比在一个字典里创建多个映射的数据,并调用每个映射的update()函数要快一些。同时可以使用它来模拟嵌套作用域和模板化处理。class collections.ChainMap(*maps)ChainMap类可把多个字典或者其它映射对象放在一起,组成一个单一的、可更新的映射对象。如果参数没有指定任何映射原创 2015-12-20 23:57:30 · 3992 阅读 · 0 评论 -
5.5 bisect--数组的二分算法
本模块实现已经排序的队列列表插入元素之后保持排序。对于个大量数据的列表来看,插入元素并保持排序,计算量是非常大的。本模块实现了bisect算法,主要基于二分算法来实现。bisect.bisect_left(a, x, lo=0, hi=len(a)) 对有序列表a里插入元素x,保持有序不变,返回插入的位置。参数lo和hi是表示判断列表的范围,默认是整个范围。如果插入的元素x已经在列表a存在,那就插原创 2016-01-22 22:07:44 · 2726 阅读 · 0 评论 -
5.6 array--高效的数值类型数组
本模块定义高效的数值类型数组,主要包括类型有:字符、整数、浮点数。数值类型数组与列表比较相似,主要区别在于列表可以放入不同类型的元素,而类型数组只能放入一种类型的元素。类型数组只支持下面的类型:类型字符C类型Python类型占用最小的字节备注'b'signed charint1 'B' unsigned charint1 'u'Py_UNICODEUnicode haracter2 'h'sig原创 2016-01-23 11:18:25 · 2629 阅读 · 0 评论 -
5.7 copy--简单拷贝和深度拷贝对象
在Python里的赋值语句是不拷贝对象的,它只是让目标和对象之间进行绑定。对于一些可变的容器来说,有时需要修改容器的内容,但不影响之前的对象。因此本模块提供了简单拷贝和深度拷贝对象的功能。 copy.copy(x) 返回一个简单拷贝的对象。例子:#python 3.4import copy l = [2, 4]x = copy.copy(l)print(x)结果输出如下:[2, 4] copy.d原创 2016-01-23 21:54:12 · 2088 阅读 · 0 评论 -
5.1.8 strftime()和strptime()的使用
strftime()函数是用来格式化一个日期、日期时间和时间的函数,支持date、datetime、time等类,把这些日期、日期时间或时间通过格式字符要求格式为字符串表示。相反strptime()函数就是从字符串表示的日期时间按格式化字符串要求转换为相应的日期时间。 对于time对象来说,格式化字符串不要使用年、月、日相关的字符,因为time对象没有相应的值。如果不幸使用了,只能默认输出为0值。原创 2015-12-06 21:45:03 · 13508 阅读 · 0 评论 -
5.1.7 timezone对象
类timezone是类tzinfo的子类,每一个实例都表示一个固定时区的时间。class datetime.timezone(offset[, name]) 构造一个时区,参数offset是一个表示当地时间与UTC时间差的timedelta对象。范围必须在-24小时和24小时之间。参数name是可选,用来表示时区名称,当调用tzname(dt)返回相应字符串;如果没有设置字符串,就返回UTCsHH原创 2015-12-05 20:07:24 · 3144 阅读 · 0 评论 -
5.3.3.1 deque其它使用方式
在本节里提供了一些关于deque其它使用方式。提供类似UNIX中的命令tail的功能,显示一个文件最后面一段文本:def tail(filename, n=10): '返回文件最后的n行文本' with open(filename) as f: return deque(f, n) 比如使用deque来计算一个移动平均数:def moving_average(iterab原创 2016-01-09 09:51:25 · 1526 阅读 · 0 评论 -
5.3.4 defaultdict对象
class collections.defaultdict([default_factory[, ...]]) 返回一个字典类似的对象。defaultdict是一个内置字典类dict的派生类。它主要是重载了一个方法__missing__(key)和增加一个可修改实例变量,它功能和函数跟dict类是一样的。第一个参数default_factory是使用它作为默认值的类型,因为python在没有赋值给原创 2016-01-09 21:34:37 · 2295 阅读 · 0 评论 -
5.3.5 namedtuple() 创建命名字段的元组结构
在命名元组里,给每个元组的位置添加一个名称,并且可以通过名称来访问,大大地提高可读性,以便写出清晰代码,提高代码的维护性。其实它就像C++里的结构体。collections.namedtuple(typename, field_names, verbose=False, rename=False) 返回一个新类型名称typenname的元组。参数field_names是一个字串表示的元素名称,每个原创 2016-01-10 21:39:14 · 3517 阅读 · 1 评论 -
5.3.1.1 ChainMap的例子和技巧
下面来提供一些ChainMap类使用的场合和技巧:模拟python内部查获命名变量的映射链:#python 3.4import builtinsimport collectionspylookup = collections.ChainMap(locals(), globals(), vars(builtins))print(pylookup)在这个例子里,把本地作用域命名、全局作用域命名和内置作原创 2015-12-26 09:03:39 · 3764 阅读 · 1 评论 -
5.3.2 Counter对象
Counter类提供一个方便和快速统计的工具。例子:#python 3.4import collections cnt = collections.Counter()for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: cnt[word] += 1print(cnt)结果输出如下:Counter({'blue': 3, 'r原创 2015-12-26 09:08:17 · 2378 阅读 · 2 评论 -
5.3.3 deque对象
class collections.deque([iterable[, maxlen]]) 返回一个新双向队列,当有输入迭代器时,会从左至右地添加到队列里。如果没有输入参数,就创建一个空队列。deque是一个具有栈和队列特性的数据结构。它支持线程安全、内存优化和两端弹出、插入元素,无论从那一个方向弹出元素都是O(1)的时间花费。在内置的数据类型list也支持相关的操作,但是它设计为对固定元素进行操原创 2015-12-27 09:50:10 · 3063 阅读 · 0 评论 -
5.3.6 OrderedDict对象
有序字典与字典是一样的功能,只不过它保持插入字典的顺序,当需要遍历时会先访问最先插入的项。class collections.OrderedDict([items]) 返回一个新的dict类派生类实例,支持字典的操作方法。例子:#python 3.4import collections d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}od =原创 2016-01-13 20:46:19 · 2986 阅读 · 0 评论 -
8.1.2 纯路径操作
纯路径操作对象提供了一些操作路径的功能,但不会访问文件系统的功能。主要提供下面三个类对象:class pathlib.PurePath(*pathsegments) 创建一个通用表示文件路径的类。例子:#python 3.4from pathlib import * p = PurePath('F:\\temp\\py')print(p)p = PurePath('foo', 'some/path原创 2016-03-05 09:56:15 · 2002 阅读 · 0 评论 -
8.1.3 路径的方法和属性
纯路径的类提供下面的方法和属性:PurePath.drive 字符串表示的驱动器的字母或者名称。例子:#python 3.4from pathlib import * p = PurePath('/usr/bin/python3')print(p.drive)p = PureWindowsPath('c:/blog.csdn.net/caimouse')print(p.drive)p = Pure原创 2016-03-05 09:58:55 · 1889 阅读 · 0 评论 -
5.8 pprint--美观地打印数据
pprint模块提供了一个美观地打印Python数据结构的方式。如果是要格式化的数据结构里包含了非基本类型的数据,有可能这种数据类型不会被加载。比如数据类型是文件、网络socket、类等。本模块格式化时,尽可能保持一个对象一行表示,并且当超过允许宽度时也会自动换行表示。所有字典数据类型,都会先按键来排序,然后再进行格式化输出。 class pprint.PrettyPrinter(indent=1原创 2016-02-20 12:31:36 · 2963 阅读 · 0 评论 -
5.9 enum--支持枚举类型
enum模块提供了枚举类型的支持。枚举类型是由一个名称和一个统一值来组成,值是常量的值,它们之间可以通过名称进行比较和引用,还可以迭代访问。5.9.1 模块内容本模块主要定义了两种枚举类型:Enum和IntEnum。定义了一个装饰器函数unique(),以便保证所有枚举常量的唯一性。class enum.Enum 构造枚举常量的基类。例子:#python 3.4import enum class原创 2016-02-20 15:21:04 · 1744 阅读 · 0 评论 -
6.1 numbers--数值抽象基类
6. 数值和数学库本库主要提供了数值和数学相关的函数处理以及数据类型。numbers模块定义了抽象的数值类型,math和cmath模块主要包括不同的数学函数,比如用来计算浮点数和复数。decimal模块支持十进制数值表示,可以用任何精度进行运算。6.1 numbers--数值抽象基类本模块主要按文档(PEP 3141)定义了数值抽象基类。class numbers.Number 数值类的基类,如果原创 2016-02-21 08:39:03 · 2023 阅读 · 0 评论 -
6.3 cmath--数学函数
本模块提供了处理复数的数学函数,因此这些函数接受整数、浮点数或者复数作为参数。6.3.1 与极坐标相互转换的函数在Python里表示一个复数z,实部使用z.real表示,虚部使用z.imag,可以使用下面的公式来表示:z = z.real + z.imag*1j同样,采用极坐标也可以表示一个复数,具体是这样表示复数z,采用复数z的模r和复数向量与x轴正坐标的夹角来表示。cmath.phase(x)原创 2016-02-21 10:03:20 · 2859 阅读 · 0 评论 -
8.1.4 具体路径类
具体路径类是纯路径类的子类,后面提供了一些操作方法,以及一些系统调用。创建具体路径类主要有三个方法创建:class pathlib.Path(*pathsegments) 构造一个PurePath类的子类,它表示具体的路径类。例子:#python 3.4from pathlib import * p = Path('/a/b.py')print(p.with_suffix('.7z'))print原创 2016-03-06 22:28:33 · 3142 阅读 · 0 评论