python官方文档阅读笔记[1] 字符串的format 正则表达式

目前读到standard library 关于字符串和正则的部分,这一期主要讲述一下python中的字符串format和正则,我认为是较为精华的部分。如果只是对那些知识进行罗列,或者直接拷贝,那我觉得是违背一个博客的初衷的。我将官方文档的内容进行了一小点的二次加工,所以可能会有问题,也请看官看到的能够指正,谢谢。

看的是2.7版,链接 如果需要看正解,务必以官方文档为准。

https://docs.python.org/2.7/library/strings.html

以下主要我会讲解冷门的例子中的一些解释,注重一下实践中的学习:

  • 字符串的format各进制的整数的输出的例子

[code lang=”python”]
>>> width = 5
>>> for num in range(5,12):
… for base in ‘dXob’:
… print ‘{0:{width}{base}}’.format(num, base=base, width=width),
… print

5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
[/code]

解释一下,使用带大括号的字符串使用string的format方法,每一个大括号的元素将会对应format中的参数。

0就会对应num width对应width base对应base
width永远是5,表示每次的输出字符串有5的宽度,使这些内容能够输出成表格形式,且默认右对齐。

如果有嵌套的大括号,其实就可以认为是一个不断迭代解开括号的过程,以第一行第一列为例,字符串即为’5:{width}{base}’.format(base =’d’, width = 5) 也就是5以有符号整数形式输出。其余的X为以16进制输出,o则是以八进制输出,b则是以二进制输出。

  • 正则表达式 capturing与non-capturing

正则表达式是一个伟大的发明,在文字处理时,可以做到使用一个很短的正则表达式表达一个复杂的逻辑来进行搜索、替换、匹配的操作,在编译过程中进行词法分析就经常可以用到正则表达式的一个方式。

python作为一个脚本语言,标准库中对操作字符串处理的正则表达式自然是十分强大而且方便,学习这一方面主要是2点,第1点是正则表达式的语法,想必这是每个程序员或者hacker的基本功,不仅适用于python,还适用于任何其他的变成语言和工具。第2点就是python的相关API的使用。

按照惯例贴上官方文档的链接,请以官方文档为准
https://docs.python.org/2.7/library/re.html

最简单的[]的用法,{,}的用法,|的用法,常用的后加个字母代表的意义也就不说了,今天主要讲讲capturing和non-capturing
使用(…)括起来的在很多情况下可以作为一个捕获型的子匹配,会将这个子匹配存在内存中,在这之后可以用num来引用这个匹配的字符串表示将这个字符串再重复一遍,达到一个动态变化的作用,可以用于如XML的标签的匹配上,而且还可以在Python使用时使用match对象中的group来对(…)中的内容进行提取。

但是在(?:…)这种写法中,这个正则表达式不会保存括号中的内容进行下一次匹配。

举个例子:
下列第一行中,abc标签用def闭合(不符合XML的语法,但是举例子),在匹配1时,会匹配捕获到的abc的内容,所以第一行中没有匹配上
第二行中abc标签闭合能与abc完美的符合。
第三行中,因为?:开始的字符串匹配不会进行存储,所以正则表达式匹配时在内存中根本没有1这个元素,所以造成了异常。
[code lang=”python”]
>>> re.match(r'<(abc|def)>.*</1>’,'<abc>content</def>’)
>>> re.match(r'<(abc|def)>.*</1>’,'<abc>content</abc>’)
<_sre.SRE_Match object at 0x0000000002A00288>
>>> re.match(r'<(?:abc|def)>.*</1>’,'<abc>content</def>’)

Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
re.match(r'<(?:abc|def)>.*</1>’,'<abc>content</def>’)
File "E:DevelopingPythonlibre.py", line 137, in match
return _compile(pattern, flags).match(string)
File "E:DevelopingPythonlibre.py", line 242, in _compile
raise error, v # invalid expression
error: bogus escape: ‘\1’
[/code]

 

 

python官方文档读书笔记[0] enumerate map with…open

根据之前定的计划,开始水一些小笔记,主要是为了给自己看,不是做教程,所以只选取一些以前不太了解的小知识。

代码高亮插件待配置

目前python官方文档扫了一遍Tutorial,然后开始看Standard Library built-in functions篇,有些以前不太熟但是感觉很有用的用法。

  • enumerate()函数 同时遍历元素和索引值

当我们遍历一个序列时,如果需要用到每一个元素的值时,习惯上会这么写:
[code lang=”python”]
>>> lst = [10,20,30,40]
>>> for elem in lst:

[/code]

当需要同时用到每一个iterator以及它的索引值时,就可以使用到enumerate()函数,将序列作为其参数,可以在每个iterator中产生(索引号,元素值)的元组,用法如下:
[code lang=”python”]
>>> lst = [10,20,30,40]
>>> for i, elem in enumerate(lst):

[/code]

  • map()函数用法 将一个或多个序列中的元素批量进行修改转化成新的序列B

map(func,seq1[,seq2…])

第一个参数func为一个函数对象,这个函数将运用在后续的seq1,seq2…中,map函数将会遍历计算return_value[i] = func(seq1[i],seq2[i],…) 形成一个新的序列。

通常会与lambda表达式一起使用,会使得程序代码量变得十分简洁。

举个例子吧:一个序列中全是整数,我想将这个序列的值全都乘以2
[code lang=”python”]
>>> l = [5, 10, 15, 30]
>>> map(lambda x:x*2, l)
[10, 20, 30, 60]
[/code]

  • with…open,一个资源释放方便的文件读写方式

一般在文件读写时python要使用open函数,然后进行读或写,还要记得使用close函数释放文件句柄,当大量文件句柄忘记释放,则会造成程序异常,资源耗尽的现象。

with…open实际上将一个文件的读写集中在一个try block中,并且当with…open语句结束后,文件句柄自然被释放,是一个较为安全、简洁的写法。

例子:
[code lang=”python”]
>>> with open(‘workfile’, ‘r’) as f:
… read_data = f.read()
>>> f.closed
True
[/code]

一点小愿望

最近看过一篇知道创宇的技能树列表,十分有意思

http://docs.huihoo.com/knownsec/Knownsec_RD_Checklist/v2.2.html

里面有一句提到了

  • Python
    • 官方手册
      • 至少过一遍,这都没过一遍,视野会局限
      • 行之说:「我没看过Python的书,却熟读官方手册……」

真是“无形装逼,最为致命”,不过我也是喜欢这种geek范的话。

我很喜欢这样的东西,一个技能树,可以把这一行要干的事列出一个outline。

我个人是一个非常技术导向的人,工作一年半了,总觉得现在工作位置的现实稍微有些压制了我技术的发展,就算我技术变得高超,并不会使我在现在的岗位上过得更好,不一定会得到提升和更多的绩效。现在的我,还是感觉有点弱,不能讲清楚自己的技能在哪,也不能讲清楚自己目前干了什么。假如说我能站得更高,就有更多可以看,人生有更多选择的空间。

周末在家胡混了一天,感觉又浪费了一天成为砖家的积累,看着自己1600小时的dota时间记录,想想要是拿一半时间出来应该已经能Get不错的一项技能了吧。要不也订个计划吧!让自己的生活过得充实一些,更好一些。应该有些技术的,也应该有些陶冶情操的。

技术砖家的养成计划:

  1. python官方文档(必修)   2个月内完成
  2. apache, nginx学习 源码阅读
  3. UNIX环境高级编程 网络编程 看书(必修) 3个月内完成
  4. gdb jdb pdb xxxdb的调试技能
  5. 想像的零食APP
  6. 常用Kali工具熟练运用,如MetaSploit

陶冶情操养成计划:

  1. 创作属于自己的漫画
  2. 学一种舞蹈
  3. 电影观摩影评
  4. 各种各样的DIY 泥塑
  5. 配音
  6. 恋爱

上面所说的,可能也不一定会做,我是一名懒癌患者。。。

想起来读书的时候,女生笔记总是记得很好,无论是学霸还是个学渣,都会把笔记做得很认真,因为买了本心爱的漂亮的本子,然后笔记做得好显得很“认真”的样子。

一样的,我列出这些计划,可能也只是为了装点这个作为我小黄鸭的博客吧。如果有些不错的心得,我可能会写在这里的。

 

 

大家好,我是倪思宇

大家好,我是倪思宇,是一个普通的IT从业者,这是我的博客。

比较懒,以前开过一个博客,感觉好像没什么可写的,于是欠费停机了,最近突然觉得想要做些什么,想要提升一点姿势水平,捣鼓捣鼓一下VPS,也是想要留点东西给自己看看。然后可能把自己的一篇篇naive的东西私密吧,蛤蛤。

没有做什么皮肤,也许以后会自己搞个博客系统,也许也不会。。。难说。。。

之前看到过一个叫“小黄鸭调试法”的东西,我想:这里的博客我不说估计也没人看得到,虽然域名就是我的名字。。。就把这里作为我的小黄鸭,让它不厌其烦地听听我的一些感想吧。