Python基础-常用模块
这篇文章是对廖雪峰老师的python 3教程中python常用模块内容相关的笔记。廖雪峰老师的python基础教程不仅细致的讲解了python的语法、还点出了语法中的注意点、python常用的模块、python的面向对象和函数式编程以及一些周边。对廖雪峰老师的python基础教程分为四部分。一、语法;二、面向对象和函数式;三、语言机制关系密切的模块;四、常用模块。
正则表达式
通过re模块来使用正则表达式,正则表达式的匹配字符串需要以r作为前缀:r’ABC|-001’
1 | import re |
切分字符串
1 | re.split(r'[\s\,\;]+', 'a,b;; c d') |
分组
1 | m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') |
预编译
1 | #预编译的正则表达式在使用时就不需要再行编译 |
常用模块
datetime
datetime模块包装了时间转换、时间计算处理等方便的类库。
1 | #获取当前时间 |
timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的
collections
namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。
1 | from collections import namedtuple |
deque高效实现插入和删除的双向列表
1 | from collections import deque |
defaultdict对于不存在的key返回一个默认值
1 | from collections import defaultdict |
OrderedDict保持Key的顺序
1 | from collections import OrderedDict |
Counter是一个简单的计数器也是dict的一个子类,例如,统计字符出现的个数:
1 | from collections import Counter |
base64
将3个8bit的字节,变换为4个6bit的数,好处是将二进制中一些无法显示的字符变的能够显示
最后剩下一个或两个字节,Base64用\x00字节在末尾补足,再在编码的末尾加上1个或2个=号,表示补了多少个字节
Base64字符集:[‘A’, ‘B’, ‘C’, … ‘a’, ‘b’, ‘c’, … ‘0’, ‘1’, … ‘+’, ‘/‘]
1 | import base64 |
struct
struct解决bytes和其他二进制数据类型的转换。
1 | import struct |
hashlib
名词解释:摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
常见的哈希算法有MD5,SHA1
1 | #MD5 |
itertools
itertools提供了非常有用的用于操作迭代对象的函数
itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是Iterator,只有用for循环迭代的时候才真正计算。
1 | import itertools |
contextlib
任何对象只要实现了上下文管理就能使用with语句
1 | with open('path/to/file','r') as f: |
- 使用@contextmanager
- with语句首先执行yield之前的语句
- yield调用会执行with语句内部的所有语句
- 最后执行yield之后的语句
1 | from contextlib import contextmanager |
使用closing()把一个对象变成为上下文对象
1 | from contextlib import closing |
closing也是一个经过@contextmanager装饰的generator,这个generator编写起来其实非常简单
1 |
|
XML
SAX解析XML
1 | from xml.parsers.expat import ParserCreate |
生成XML(通过返回字符串)
1 | L = [] |
HTMLParser
解析HTML
1 | from html.parser import HTMLParser |
urllib
GET
1 | from urllib import request |
POST
只需要将参数以data的形式传入即可以POST形式发送请求。
1 | login_data = parse.urlencode([ |
代理
通过一个Proxy访问网站,我们需要利用ProxyHandler来处理
1 | proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'}) |
常用第三方模块
PIL
PIL是图片处理的模块,使用它可以生成验证码、模糊图片、缩放图片
生成验证码
1 | from PIL import Image, ImageDraw, ImageFont, ImageFilter |
模糊图片
1 | from PIL import Image, ImageFilter |
缩放图片
1 | from PIL import Image |
Tips:pillow兼容PIL,且是最新版,PIL未更新好久
图形界面
Python支持多种图形界面的第三方库,包括:Tk、wxWidgets、Qt、GTK等
Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。
Tkinter分专管访问Tk的接口,Tk是一个图形库,支持多个操作系统。Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。
1 | from tkinter import * |
网络编程
使用socket进行tcp、udp客户端和服务端的编程。
TCP编程
客户端
1 | # 导入socket库: |
服务器
1 | # 导入socket库: |
用于测试的客户端程序
1 | # 导入socket库: |
UDP编程
服务端
1 | import socket |
客户端
1 | import socket |
访问数据库
MySQL
使用mysql.connector驱动连接数据库
1 | #到如MySQL驱动 |
virtualenv
virtualenv是用来为一个应用创建一套“隔离”的Python运行环境,以防使用的包的版本冲突
使用命令:virtualenv –no-site-packages env_dir创建一个独立的环境,–no-site-packages意味着不复制第三方的包到环境中
windows系统进入虚拟环境env_dir\Scripts\activate