学习python的日常7
---恢复内容开始---
正则表达式:
在正则表达式中,用\d可以匹配一个数字,\w可以匹配一个字母或数字,'.'可以匹配任意字符,用*表示任意个字符,用+表示至少一个字符,用?表示0个货一个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:
\d{3}\s+\d{3,8} \d{3}表示匹配三个数字,\s表示匹配一个空格,\s+表示至少有一个空格,\d{3,8}表示3-8个数字,如果要表示'010-12345'这样的号码,中间的‘-’要用'\'转义,\d{3}\-\d{3,8}。
[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
-
[0-9a-zA-Z\_]+
可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100'
,'0_Z'
,'Py3000'
等等; -
[a-zA-Z\_][0-9a-zA-Z\_]*
可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量; -
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}
更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B
可以匹配A或B,所以(P|p)ython
可以匹配'Python'
或者'python'
。
^
表示行的开头,^\d
表示必须以数字开头。
$
表示行的结束,\d$
表示必须以数字结束。
你可能注意到了,py
也可以匹配'python'
,但是加上^py$
就变成了整行匹配,就只能匹配'py'
了。
常用内建模块:
datetime:搞时间的。
collections:python内建的一个集合模块,提供了一些集合类。namedtuple可以自定义一个tuple对象。deque()是用来高效插入和删除操作的双向列表。
# namedtuple('名称', [属性list]): Circle = namedtuple('Circle', ['x', 'y', 'r'])
defaultdict用于在引用的Key不在时返回一个默认值。OrderedDict,可以保持Key的顺序去排序。Counter统计字符出现的个数,还有一些集合类都是可以根据需要去选用的。
base64是一种用64个字符来表示任意二进制数据的方法。struct模块的pack函数把任意数据类型变成bytes,unpack把bytes变成相应的数据类型。hashlib,利用摘要算法MD5,SHA1来把任意长度的数据转换为一个长度固定的数据串。然后在MD5存储口令的同时加盐可以更好地实现口令地维护。
db = {} def register(username, password): db[username] = get_md5(password + username + 'the-Salt')
Python内置的hmac模块实现了标准的Hmac算法,它利用一个key对message计算“杂凑”后的hash,使用hmac算法比标准hash算法更安全,因为针对相同的message,不同的key会产生不同的hash。
itertools:chain()可以把一组迭代对象串联形成一个更大地迭代器。groupby()把迭代器中相邻地重复元素挑出来放一起(实际上是返回值相同,然后返回值作为Key把它们放一起。
contextlib:用来在读写文件的时候预防忘记关闭资源。
from contextlib import contextmanager class Query(object): def __init__(self, name): self.name = name def query(self): print('Query info about %s...' % self.name) @contextmanager def create_query(name): print('Begin') q = Query(name) yield q print('End') with create_query('Bob') as q: q.query()
XML:用DOM和SAX来操作XML,然后用SAX会比较好,因为是边读边解析。
from xml.parsers.expat import ParserCreate class DefaultSaxHandler(object): def start_element(self, name, attrs): print('sax:start_element: %s, attrs: %s' % (name, str(attrs))) def end_element(self, name): print('sax:end_element: %s' % name) def char_data(self, text): print('sax:char_data: %s' % text) xml = r'''<?xml version="1.0"?> <ol> <li><a href="/python">Python</a></li> <li><a href="/ruby">Ruby</a></li> </ol> ''' handler = DefaultSaxHandler() parser = ParserCreate() parser.StartElementHandler = handler.start_element parser.EndElementHandler = handler.end_element parser.CharacterDataHandler = handler.char_data parser.Parse(xml)
图形界面:Python内置的Tkinter可以满足基本的GUI程序的要求,如果是非常复杂的GUI程序,建议用操作系统原生支持的语言和库来编写。
网络编程:互联网协议简称TCP/IP协议,
---恢复内容结束---