学习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协议,

 

---恢复内容结束---

posted @ 2017-12-06 08:52  zzy0306  阅读(170)  评论(0编辑  收藏  举报