Python核心编程--学习笔记--6--序列(上)字符串

  本章研究Python中的序列:字符串、列表和元组。因为这些类型其实都是由一些成员共同组成的一个序列整体,所以我们把它们统称为序列。序列的存储结构可以表示为:      

                      

 

1 序列

  序列类型有着相同的访问模式:按下标访问某一元素[0, N-1],也可以通过切片操作一次得到多个元素。

1.1 标准类型操作符

  比较运算、逻辑运算(见4.5节),一般都能适用于所有序列类型。

1.2 序列类型操作符

1 in, not in  #成员关系操作符
2 +           #连接操作符
3 *           #重复操作符
4 []          #切片操作符

  成员关系操作符——obj [not] int sequence,判断对象obj是否属于序列sequence:

>>> 'py' in 'python'
True
>>> 4 not in range(6)
False

  连接操作符——sequence1+sequence2,将两个序列合并在一起,返回一个新序列:

>>> 'Py' + 'thon'
'Python'
>>> range(4) + range(4,8)
[0, 1, 2, 3, 4, 5, 6, 7]

  重复操作符——sequence * copies_int,返回一个新序列,包含copies_int个重复的sequence:

>>> '-' * 20
'--------------------'

  切片操作符——seq[index],seq[start:stop],seq[start:stop:step],访问 元素/子序列/按步长访问:

>>> aList = range(10)
>>> aList
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> aList[4]     #按下标访问单个元素
4
>>> aList[10]    #下标范围:0~len(seq),超出范围则产生异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> aList[:]       #切片操作,不指定起点和终点,则复制全部元素
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> aList[None:8]  #起始为None,则默认从第一个元素开始
[0, 1, 2, 3, 4, 5, 6, 7]
>>> aList[3:]      #终点为空,则默认直到最后一个元素
[3, 4, 5, 6, 7, 8, 9]
>>> aList[1::3]    #步长为3
[1, 4, 7]
>>> aList[-1:-len(aList)]    #负索引。不管正负索引,起始元素一定要在终点元素的左边,否则返回空
[]
>>> aList[-len(aList):-1]    #负索引
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> aList[-100:100:2]       #切片操作可以超出范围
[0, 2, 4, 6, 8]

   逆序访问序列,以及循环输出每次都去掉最后一个字符的序列:

>>> aList = range(5)
>>> aList
[0, 1, 2, 3, 4]
>>> aList[::-1]  #逆序输出
[4, 3, 2, 1, 0]
>>> for i in [None] + range(-1, -len(aList), -1): #加[None],否则第一个输出不包含最后一个元素
...     print aList[ :i]
... 
[0, 1, 2, 3, 4]
[0, 1, 2, 3]
[0, 1, 2]
[0, 1]
[0]

1.3 内建函数

  类型转换工厂函数:

1 str(obj)     #把obj对象转换成字符串(对象的字符串表示法) 
2 list(iter)   #把可迭代对象转换成一个列表对象 
3 tuple(iter)  #把可迭代对象转换成一个元组对象 
4 unicode(obj) #把对象转换成Unicode字符串(使用默认编码) 
5 basestring() #抽象工厂函数,其作用仅仅是为str和unicode函数提供父类,所以不能被实例化,也不能被调用(详见第2节) 
>>> str([1,2,3])
'[1, 2, 3]'
>>> list('abcd')
['a', 'b', 'c', 'd']
>>> tuple('abcd')
('a', 'b', 'c', 'd')

  一些可操作的内建函数:

 1 len(seq)          #返回seq的长度  
 2 sum(seq, init=0)  #返回seq和可选参数init的总和
 3 reversed(seq)    #接受一个序列作为参数,返回一个以逆序访问的迭代器
#接受一个可迭代对象作为参数,返回一个enumerate对象(也是一个迭代器),该对象生成由iter每个元素的index值和item值组成的元组
4 enumerate(iter)

#
返回iter或(arg0,arg1,...)中的最大值;如果指定了key,则key必须是一个可以传给sort()方法的用于比较的回调函数
5 max(iter,key=None) or 6 max(arg0, arg1, ..., key=None) 7 min(iter, key=None) or 8 min(arg0, arg1, ..., key=None)#返回iter或(arg0,arg1,...)中的最小值;如果指定了key,key同上

#接受一个可迭代对象作为参数,返回一个有序的列表;可选参数func,key 和 reverse 的含义跟 list.sort()内建函数的参数含义一样.
9 sorted(iter, func=None, key=None, reverse=False)


10 zip([it0, it1,... itN])#返回一个列表,其第一个元素是it0,it1,...这些迭代对象各自第一个元素组成的一个元组,以此类推。返回列表长度等于it..中的最小值。

2 字符串

  字符串即单/双/三引号括起来的内容;通常的字符串(str)和Unicode字符串(unicode)都是抽象类basestring的子类,这个basestring不能被实例化。

>>> basestring('abc')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The basestring type cannot be instantiated

  访问:字符串可以通过下标和切片访问字符和子串,不允许通过下标更改其内容,因为字符串是不可变类型。

>>> aStr = 'Hello Python'
>>> aStr[4]
'o'
>>> aStr[4] = 'O'    #下标操作,实际上返回一个长为1的子串,字符串对象不可更改
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

  更新:同整数一样,更新字符串的值,实际上是创建了一个新对象,并将其引用赋值给原来的变量。

>>> bStr is aStr
True
>>> bStr += 'er'
>>> bStr
'Hello Pythoner'
>>> aStr      #原对象未变
'Hello Python'

  删除:要么赋一个空字符串值(其实是减少原对象的引用计数),要么显示的del掉这个变量引用。不能直接删除其中字符或子串。

3 字符串和操作符

3.1 标准类型操作符

  比较运算、逻辑运算都适合于字符串,实际按照字符ASCII值来比较。

3.2 序列操作符

  切片操作符[]、成员操作符[not] in、连接操作符+、重复操作符* 都适用于字符串。

  一些string模块预定义的字符串:

>>> import string
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> a = 'hello' + ' ' + 'world'  #运行时连接字符串
>>> a
'hello world'
>>> b = 'hello' ' ' "word"      #编译时连接字符串,同其他语言,Python默认将相邻的字符串连接为一个
>>> b
'hello word'

  如果一个普通字符串和一个Unicode字符串连接,则普通字符串会被先转换成Unicode字符串,再连接:

>>> 'hello' + u' ' + 'world'
u'hello world'

4 只适用于字符串的操作符

4.1 格式化操作符

  类似于C语言里printf()函数的格式。字符串格式化符号:

 1 %c    #转换成字符(ASCII码值,或者长度为一的字符串) 
 2 %r    #优先用repr()函数进行字符串转换  
 3 %s    #优先用 str()函数进行字符串转换 
 4 %d/%i #转成十进制数 
 5 %u    #转成十进制数  
 6 %o    #转成八进制数 
 7 %x/%X #转成十六进制数(x/X代表转换后的十六进制字符的大小写) 
 8 %e/%E #转成科学计数法(e/E控制输出e/E) 
 9 %f/%F #转成浮点数(小数部分自然截断) 
10 %g/%G #%e和%f / %E和%F的简写 
11 %%    #输出% 

  格式化操作符辅助命令:

1 *     #定义宽度或者小数点精度 
2 -     #左对齐 
3 +     #在正数前面显示加号( + ) 
4 <sp>  #在正数前面显示空格 
5 #     #在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') 
6 0     #显示的数字前面填充‘0’而不是默认的空格 
7 %     #'%%'输出一个单一的'%' 
8 (var) #映射变量(字典参数) 
9 m.n   #m是显示的最小总宽度,n是小数点后的位数(如果可用的话) 

  例子:

>>> '%x' % 108     #返回其十六进制的字符串表示
'6c'
>>> '%#X' % 108    #打印十六进制的前缀,大写X
'0X6C'
>>> '%.2f' % 1234.567890    #保留两位小数位,默认为六位
'1234.57'
>>> '%e' % 1234.567890      #科学计数法,默认小数点后六位
'1.234568e+03'
>>> '%G' % 1234.567890      #默认整数位和小数位一共保留6位,从左到右第一个非0数字开始计算
'1234.57'
>>> '%g' % 0.001234567890  #前面的0不计入这六位数

'0.00123457' >>> "%+d" % 4 #整数加符号 '+4' >>> "% d" % 4 #整数前加空格 ' 4' >>> "we are at %d%%" % 100 #输出% 'we are at 100%' >>> num = 123 >>> 'dec: %d/ oct: %#o/ hex: %#X' % (num, num, num) #分别输出十进制、带前缀的八进制和十六进制 'dec: 123/ oct: 0173/ hex: 0X7B' >>> "MM/DD/YY = %02d/%02d/%02d" % (5, 15, 2014) #输出宽度至少为2,不够的前面补0 'MM/DD/YY = 05/15/2014' >>> 'There are %(howmany)d %(lang)s Quotation Symbols' % \ ... {'lang': 'Python', 'howmany': 3} #字典的键作为格式符,输出对应值的相应格式 'There are 3 Python Quotation Symbols'

  字符串格式化操作符是一个很有用的调试工具,print语句自动为每个对象调用str()函数,获得一个适当的描述信息。

4.2 字符串模板:更简单的替代品

  对于上一节最后一个例子,如果忘记了%(lang)s等这种转换类型参数,就会产生错误。

  而新的字符串模板Template对象使用类似shell中变量一样的$符号,还有两个方法substitute()和safe_substitute(),来显示字符串:

>>> from string import Template
>>> s = Template('There are ${howmany} ${lang} Quotation Symbols')    #两个变量
>>> print s.substitute(howmany=3, lang='Python')  #使用模板
There are 3 Python Quotation Symbols
>>> print s.substitute(lang='Python')      #只提供了一个变量实参,引发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/string.py", line 172, in substitute
    return self.pattern.sub(convert, self.template)
  File "/usr/lib/python2.7/string.py", line 162, in convert
    val = mapping[named]
KeyError: 'howmany'
>>> print s.safe_substitute(lang='Python')  #安全函数,虽然只提供一个参数,仍然输出
There are ${howmany} Python Quotation Symbols

4.3 原始字符串操作符(r/R)

  字符串前面加r,取消串内的转义:

>>> f = open('C:\windows\temp\readme.txt', 'r')    #\t \r被转义
Traceback (most recent call last):
Edit By Vheavens Edit By Vheavens 
File "<stdin>", line 1, in ?
f = open('C:\windows\temp\readme.txt', 'r')
IOError: [Errno 2] No such file or directory: 'C:\\windows\\temp\readme.txt'
>>> f = open(r'C:\windows\temp\readme.txt', 'r')   #取消转移
>>> f.readline()
'Table of Contents (please check timestamps for last update!)\n'
>>> f.close()

4.4 Unicode字符串操作符(u/U)  

>>> u'abc'
u'abc'
>>> ur'Hello\nWorld'    #u必须在r之前
u'Hello\\nWorld'

5 内建函数

5.1 标准类型函数

  cmp(obj1, obj2)——对于字符串,则是按照ASCII值来比较大小的。左边大,返回1;左边小,返回-1;相等则返回0。

5.2 序列类型函数

   len()返回字符个数、max()和min()分别返回ASCII值最大和最小的字符、enumerate()返回包含下标和字符的元组组成的迭代对象、zip()返回一个列表:

>>> enumerate('abc')
<enumerate object at 0xb72b0cac>
>>> for i in enumerate('abc'):    #返回一个可迭代对象
...     print i
... 
(0, 'a')
(1, 'b')
(2, 'c')
>>> for i,c in enumerate('abc'):
...     print i,c
... 
0 a
1 b
2 c
>>> zip('123', 'ABC', 'abc')    #各自第n个元素组成的元组,成为返回值列表的第n个元素
[('1', 'A', 'a'), ('2', 'B', 'b'), ('3', 'C', 'c')]

5.3 字符串类型函数

1 raw_input() #可以用一个字符串作参数,作为提示,将用户输入转为字符串返回
 
2 str()    #工厂函数,将对象转换成可打印的字符串表示
3 unicode()  #工厂函数,将对象转换成Unicode的字符串表示
 
4 chr()    #接收[0,255]内的数,返回对应的字符
5 unichr()   #接收一定范围内的数,返回Unicode字符(具体范围视系统配置而定)
6 ord()    #接收一个字符
>>> unichr(12345)
u'\u3039'
>>> ord('a')
97
>>> ord(u'\u2345')    #\u表明后面是一个Unicode字符,如果不加,就是一个字符串'2345'
9029

6 字符串内建函数 

  字符串是不可变类型,下面这些方法都是生成一个新对象并返回,原字符串并未变化:

 1 string.capitalize()  #把字符串的第一个字符大写
 2 string.center(width) #返回一个原字符串居中,并使用空格填充两边至长度width的新字符串
 3 string.count(str, beg=0, end=len(string))  #返回str在一定范围里面出现的次数
 #以encoding指定的编码格式解码string,出错默认报ValueError的异常,除非errors指定'ignore'或'replace' 
 4 string.decode(encoding='UTF-8', errors='strict') 
 5 string.encode(encoding='UTF-8', errors='strict') #以encoding指定的编码格式编码string,errors同上  
 6 string.endswith(obj, beg=0, end=len(string))    #检查一定范围内的子字符串是否以obj结束  
 7 string.expandtabs(tabsize=8)        #把字符串string中的tab符号转为tabsize个空格  
 8 string.find(str, beg=0,end=len(string))  #检测str是否在一定范围子串内,在则返回其第一次出现下标,否则返回-1  
 9 string.index(str, beg=0,end=len(string)) #跟find()方法一样,不过如果str不在string中会报一个异常
10 string.format(*args, **kwargs)  #格式化输出字符串,用参数代替字符串内的{}占位符
11 string.isalnum()  #如果string非空,且所有字符都是字母或数字,则返回True
12 string.isalpha()  #如果string非空,且所有字符都是字母,则返回True
13 string.isdigit()  #如果string非空,且所有字符都是数字,则返回True
14 string.islower()  #如果string非空,且所包含的字母都是小写,则返回True
15 string.isspace()  #如果string中只包含空格,则返回True
16 string.istitle()  #如果string是标题化的(见title())则返回True
17 string.isupper()  #如果string非空,且所包含的字母都是大写,则返回True
18 string.join(seqs) #以string作为分隔符,将seqs中所有的元素(的字符串表示)合并为一个新的字符串
19 string.ljust(width)  #返回一个原字符串左对齐,并使用空格填充至长度width的新字符串
20 string.lower()    #将string中存在的所有大写字符转为小写
21 string.lstrip()   #截掉string左边的空格
22 string.partition(str)  #把string分成一个以str为中间元素的3元素元组,如果string中不包含str,则string为第一个元素
23 string.replace(str1, str2, num=string.count(str1)) #把string中的前num个str1替换成str2
24 string.rfind(str, beg=0, end=len(string))  #类似于find()函数,不过是从右边开始查找
25 string.rindex(str, beg=0, end=len(string)) #类似于index(),不过是从右边开始
26 string.rjust(width)    #返回一个原字符串右对齐,并使用空格填充至长度width的新字符串
27 string.rpartition(str) #类似于partition()函数,不过是从右边开始查找
28 string.rsplit()   #见split()函数,不过从右边开始计算
29 string.rstrip()   #删除string字符串末尾的空格
30 string.split(str=" ", num=string.count(str))    #以str为分隔符,将string从前num个分隔符上切开
31 string.splitlines(num=string.count('\n'))       #同上,不过分隔符改成换行符
32 string.startswith(obj, beg=0, end=len(string))  #检查一定范围内的子字符串是否是以obj开头
33 string.strip([obj])  #在string上执行lstrip()和rstrip()
34 string.swapcase()    #翻转string中的大小写
35 string.title()       #返回"标题化"的string,即所有单词都是以大写开始,其余字母均为小写
36 string.translate(str, del="")  #根据str给出的表(包含256个字符)转换string的字符,要过滤掉的字符放到del参数中
37 string.upper()      #将string中的所有的小写字母转换为大写
38 string.zfill(width) #返回长度为width的字符串,原字符串string右对齐,前面填充0

   第十个format()函数在原书中没有,但是本人机器上的python版本有(dir(str)可看到),所以举几个例子:

>>> '{1},{0}'.format('world', 'hello')    #{}占位符,可以调整顺序
'hello,world'
>>> '{1},{0},{py}'.format('world', 'hello', py = 'pythoner')   #{变量}占位符
'hello,world,pythoner'

7 字符串的独特特性

7.1 特殊字符串和控制字符

  即转义字符,控制字符的一个用处就是用作定界符,它们不可打印:

 1     八进制  十进制  十六进制  字符    说明 
 2 \0  000     0     0x00   NUL  空字符 Nul   #Python中不是字符串的结束符
 3 \a  007    7   0x07   BEL  响铃字符 
 4 \b  010    8   0x08   BS   退格 
 5 \t  011    9   0x09   HT   横向制表符 
 6 \n  012   10   0x0A   LF   换行 
 7 \v  013   11   0x0B   VT   纵向制表符 
 8 \f  014   12   0x0C   FF   换页 
 9 \r  015   13   0x0D   CR   回车 
10 \e  033   27   0x1B   ESC  转义 
11 \"  042   34   0x22   "    双引号 
12 \'  047   39   0x27   '    单引号 
13 \\  134   92   0x5C   \    反斜杠
14 \000 ~ \177 八进制值
15 \x00 ~ \xff x开头的十六进制值
16 \        连字符,将本行和下一行的内容连接起来

7.2 三引号

  允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。对于HTML或SQL很有用:

>>> s='''hello
... world
... \tI'm
... here'''
>>> s
"hello\nworld\n\tI'm\nhere"
>>> print s
hello
world
    I'm
here

7.3 字符串不变性

  字符串是不可变类型:

>>> s = 'abc'
>>> id(s)
139902686038944
>>> s += 'def'
>>> id(s)    #新分配内存,生成一个新对象,原对象被回收
139902685293376

8 Unicode

8.1 术语

 1 名词          意思 
 2 ASCII      #美国标准信息交换码 
 3 BMP        #基本多文种平面(第零平面) 
 4 BOM        #字节顺序标记(标识字节顺序的字符) 
 5 CJK/CJKV    #中文-日文-韩文(和越南语)的缩写 
 6 Code point   #类似于ASCII值,代表Unicode字符的值,范围在range(1114112)或者说0x000000到0x10FFFF 
 7 Octet       #八位二进制数的位组 
 8 UCS        #通用字符集 
 9 UCS2       #UCS的双字节编码方式(见 UTF-16) 
10 UCS4       #UCS的四字节编码方式
11 UTF        #Unicode或者UCS的转换格式
12 UTF-8      #八位UTF转换格式(无符号字节序列,长度为1~4个字节)                          
13 UTF-16      #16位UTF转换格式(无符号字节序列,通常是16位长[两个字节],见 UCS2)

8.2 什么是Unicode

  ASCII字符只有1个字节,无法支持像汉语这种字符,因此使用Unicode字符,它使用1个或多个字节,可表示90,000+字符。

8.3 怎么用Unicode

  Python中字符串已经不再是个类型,而是对象。ASCII字符串是StringType,Unicode字符串是UnicodeType。  

  以上两种的行为是非常相近的。string模块里面都有相应的处理函数,string模块已经停止了更新,只保留了ASCII 码的支持,string模块已经不推荐使用。在任何需要跟Unicode兼容的代码里都不要再用该模块,保留该模块仅仅是为了向后兼容。

  str()和chr()处理Unicode字符串时会先转换成ASCII字符串,超出范围则报错;unicode()和unichr()则是Unicode版本的str()和chr()。

8.4 Codecs是什么

  codec是COder/DECoder的首字母组合,它定义了文本跟二进制值的转换方式。Unicode用的是多字节,所以它支持多种不同的编码方式,比如说codec支持的四种耳熟能详的编码方式是:ASCII,ISO8859-1/Latin-1,UTF-8和UTF-16。 

  其中最著名的是UTF-8编码,它也用一个字节来编码ASCII 字符,跟ASCII编码完全相同。UTF-8编码用1~4个字节来表示其他语言的字符,汉语一般都是用3个字节来表示。Python替我们完成了相关细节,我们无须为处理多字节字符的复杂问题而担心。 

  UTF-16以后可能会常用。它容易读写,因为所有字符都是用2B来存储,而这两个字节的顺序需要定义一下(大小端的问题),一般的UTF-16编码文件都需要一个BOM(Byte Order Mark),或者显式地定义UTF-16-LE(小端)或者 UTF-16-BE(大端)字节序。

8.5 编码解码  

  Unicode支持多种编码格式,写文件时必须定义一个编码(encoding参数)用于把对应的Unicode内容转换成定义的格式。

  Unicode字符串的encode()用于编码,该函数接受字符串中的字符为参数,输出指定的编码格式的内容。

#!/usr/bin/env python 

''' 
An example of reading and writing Unicode strings:
Writes a Unicode string to a file in utf-8 and reads it back in. 
''' 

CODEC = 'utf-8' 
FILE  = 'unicode.txt' 

hello_out = u"Hello world\n" 
bytes_out = hello_out.encode(CODEC) #编码

f = open(FILE, "w")
f.write(bytes_out)   #将编码的内容写入文件
f.close()

f = open(FILE, "r")
bytes_in = f.read()  #读文件
f.close()

hello_in = bytes_in.decode(CODEC) #解码
print hello_in,           #输出,去掉print的换行符(即逗号的作用)
$ python pytest.py #执行
Hello world
$ cat unicode.txt  #显示生成的文件内容
Hello world

8.6 Unicode应用到实际应用中

  以下经验可以避免很多错误:

  • 程序中出现字符串时一定要加个前缀u。
  • 不要用str()函数,用unicode()代替。
  • 不要用过时的string模块——如果传给它的是非ASCII字符,它会把一切搞砸。
  • 尽量不在程序里面编解码Unicod字符,只在写入文件/数据库/网络时才调用encode()函数;只在读数据时才调用decode()函数。

8.7 Python的Unicode支持

  内建的unicode()、encode()、decode()函数,接受一个字符串为参数,分别返回一个unicode对象、编码/解码后的字符串。

  类型:Unicode类型是basestring的子类,用unicode()工厂函数/字符串前加u来创建实例。

  序数:ord()接受一个unicode字符,返回其码值;unichr()接受一个码值,返回一个Unicode字符。

  转换:普通字符串和Unicode字符串运算,会将普通串强制转换为Unicode串。

  异常:所有关于Unicode编解码的异常都继承自UnicodeError,这是exceptions模块中ValueError的子类。

  RE:正则表达式引擎需要Unicode支持。

  格式化操作:如果格式化字符串是Unicode对象(比如u"%s"),或输出中包含Unicode串,则执行转换 数字->普通字符串->Unicode字符串。

>>> '%s' % 'abc'
'abc'
>>> u'%s' % 'abc'    #格式化字符串是Unicode对象
u'abc'
>>> '%s' % u'abc'    #输出是Unicode对象
u'abc'
>>> '%s-%s' % (u'abc', 12)    #数字->字符串->Unicode串
u'abc-12'

  常用Unicode编码:

1 utf-8      #变量长度为8的编码(默认编码) 
2 utf-16     #变量长度为16的编码(大/小端) 
3 utf-16-le  #小端UTF-16编码 
4 utf-16-be  #大端UTF-16编码 
5 ascii      #7位ASCII码表
6 iso-8859-1 #ISO8859-1(Latin-1)码表 
7 unicode-escape     #(定义见Python Unicode构造函数) 
8 raw-unicode-escape #(定义见Python Unicode构造函数) 
9 native     #Python用的内部格式

9 相关模块

 1 string      #字符串操作相关函数和工具,比如Template类 
 2 re          #正则表达式:强大的字符串模式匹配模块 
 3 struct      #字符串和二进制之间的转换 
 4 c/StringIO  #字符串缓冲对象,操作方法类似于file对象 
 5 base64      #Base 16,32,64数据编解码 
 6 codecs      #解码器注册和基类 
 7 crypt       #进行单方面加密 
 8 difflib     #找出序列间的不同 
 9 hashlib     #多种不同安全哈希算法和信息摘要算法的API  
10 hma         #HMAC信息鉴权算法的Python实现  
11 md5         #RSA的MD5信息摘要鉴权 
12 rotor       #提供多平台的加解密服务 
13 sha         #NIAT的安全哈希算法SHA  
14 stringprep  #提供用于IP协议的Unicode字符串 
15 textwrap    #文本打包和填充
16 unicodedata #Unicode数据库

  正则表达式的用处自不必说,第15会做详细介绍。re模块中重要的函数有:  

  • compile() - 将一个RE表达式编译成一个可重用的RE对
  • match()   - 试图从字符串的开始匹配一个模式
  • search()  - 找出字符串中所有匹配的项
  • sub()      - 进行查找替换操作。其中的一些函数返回匹配到的对象,可以通过组匹配来访问(如果找到的话)。

10 字符串关键点总结

  • 单/双引号包围
  • 不可变类型
  • 格式化操作符%
  • 三引号
  • 取消转义
  • NUL或'\0'不是结束符
posted @ 2013-11-29 23:06  阿杰的专栏  阅读(459)  评论(0编辑  收藏  举报