Version:Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiences; the other is to make it so complicated that there are no obvious deficiences.
—- C.A.R.Hoare
Success in life is a matter not so much of talent and opportunity as of concentration and perseverance
—- C.W.Wendte
选择Python的原因
- 简单易学,功能强大,具有高效的高层数据结构,支持面向对象编程
- 解释性语言,可扩展性,可嵌入性,丰富的库
选择一个编辑器
工欲善其事必先利其器,所以选择编辑器首当其冲。
- IDLE:Python自带,极简利器,支持语法高亮
- Vim/Emacs:
Linux/FreeBSD
平台上的开发利器,二者择其一 - PyCharm:号称最智能的Python编辑器,的确是的,但是略微复杂
数据结构和算法
解压序列赋值给多个变量
|
|
查找最大或最小的N个元素
|
|
字典操作相关
|
|
序列中出现次数最多的元素
|
|
通过某个关键字排序一个字典列表
|
|
通过某个字段将记录分组
|
|
过滤序列元素
|
|
转换并同时计算数据
|
|
合并多个字典或映射
|
|
字符串和文本
使用多个界定符分割字符串
string
对象的split()
方法只适应于非常简单的字符串分割情形,它并不允许有多个分隔符或者是分隔符周围不确定的空格。当你需要更加灵活的切割字符串的时候,最好使用re.split()
方法。
|
|
函数re.split()
是非常实用的,因为它允许你为分隔符指定多个正则模式。比如,在上面的例子中,分隔符可以是逗号(,),分号(;)或者是空格,并且后面紧跟着任意个的空格。只要这个模式被找到,那么匹配的分隔符两边的实体都会被当成是结果中的元素返回。 返回结果为一个字段列表,这个跟str.split()
返回值类型是一样的。
当你使用re.split()
函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。比如,观察一下这段代码运行后的结果。
|
|
如果你不想保留分割字符串到结果列表中去,但仍然需要使用到括号来分组正则表达式的话,确保你的分组是非捕获分组,形如(?:...)
。
|
|
字符串匹配
|
|
|
|
字符串搜索和替换
一个替换回调函数的参数是一个match
对象,也就是match()
或者find()
返回的对象。使用group()
方法来提取特定的匹配部分。回调函数最后返回替换字符串。如果除了替换后的结果外,你还想知道有多少替换发生了,可以使用re.subn()
来代替。
|
|
为了在文本操作时忽略大小写,你需要在使用re模块的时候给这些操作提供re.IGNORECASE
标志参数。
|
|
最短匹配模式
在这个例子中,模式r'\"(.*)\"'
的意图是匹配被双引号包含的文本。但是在正则表达式中*操作符是贪婪的,因此匹配操作会查找最长的可能匹配。
|
|
这样就使得匹配变成非贪婪模式,从而得到最短的匹配,也就是我们想要的结果。
多行匹配模式
这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。为了修正这个问题,你可以修改模式字符串,增加对换行的支持。比如:
|
|
在这个模式中,(?:.|\n)
指定了一个非捕获组(也就是它定义了一个仅仅用来做匹配,而不能通过单独捕获或者编号的组)。re.compile()
函数接受一个标志参数叫 re.DOTALL
,在这里非常有用。它可以让正则表达式中的.匹配包括换行符在内的任意字符。比如:
|
|
删除字符串中不需要的字符
strip()
方法能用于删除开始或结尾的字符。lstrip()
和rstrip()
分别从左和从右执行删除操作。默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符。
如果你想处理中间的空格,那么你需要求助其他技术。比如使用replace()
方法或者是用正则表达式替换。
|
|
字符串对齐
对于基本的字符串对齐操作,可以使用字符串的ljust()
,rjust()
和center()
方法。
|
|
所有这些方法都能接受一个可选的填充字符。
|
|
字符串中插入变量
|
|
以指定列宽格式化字符串
|
|
在字符串中处理html和xml
如果你想替换文本字符串中的‘<’
或者‘>’
,使用html.escape()函数可以很容易的完成。比如:
|
|
如果你接收到了一些含有编码值的原始文本,需要手动去做替换,通常你只需要使用HTML
或者XML
解析器的一些相关工具函数/方法即可。比如:
|
|
字节字符串上的字符串操作
|
|
这些操作同样也适用于字节数组。
|
|
大多数情况下,在文本字符串上的操作均可用于字节字符串。然而,这里也有一些需要注意的不同点。首先,字节字符串的索引操作返回整数而不是单独字符。
|
|
第二点,字节字符串不会提供一个美观的字符串表示,也不能很好的打印出来,除非它们先被解码为一个文本字符串。
|
|
参考文献
[1] A Byte of Python3
[2] python3-cookbook