Python 常见库
介绍
标准库
os
os.name
字符串指示你正在使用的平台。比如对于Windows,它是’nt’,而对于Linux/Unix 用户,它是’posix’。
os.getcwd()
函数得到当前工作目录,即当前Python 脚本工作的目录路径。
os.getenv()
和os.putenv()
函数分别用来读取和设置环境变量。
os.listdir()
返回指定目录下的所有文件和目录名。
os.remove()
函数用来删除一个文件。
os.system()
函数用来运行shell 命令。
six
: 专门用来兼容 Python 2 和 Python 3 的库。解决了如 urllib
的部分方法不兼容, str
和 bytes
类型不兼容等问题
sys
sys.argv
程序的入口参数,是一个列表
sys.path
装载模块的搜索路径,是一个列表
sys.version
python 的版本,是一个string
sys.exit(status)
退出程序,是一个函数
time
time.sleep(n)
休息n 秒,可以是小数
time.time()
返回一个浮点数,从 1970-1-1 00:00:000
到当前绝对时间的秒数,还有6 位的小数
time.localtime(second)
返回一个元组,如果没有second,就使用time.time()返回的秒
- 元组示例:
(2009, 8, 2, 20, 40, 3, 6, 214, 0)
time.strftime(format)
格式:time.strftime(’%Y-%m-%d %H:%M:%d’ ‘2009-08-02 20:50:02’
math
- 四舍五入,向下取余:
import math; math.floor(39.9)
- 平方根:
import math; math.sqrt(9)
- x 的 y 次方:
import math; math.pow(x, y)
- random
- 随机数:
import random; random.randint(1, 100)
- md5
- md5.new(arg) arg 要md5 的内容,返回一个md5 对象
- digest(),摘要,返回16 个字节
- hexdigest(),16 进制摘要,返回32 个字节
- base64
- base64.b64encode
- base64.b64decode
- hashlib
- hashlib.md5()
- hashlib.sha1()
- eval 作用:将字符串
str
当成有效的表达式来求值并返回计算结果,可以把 list、tuple、dict 和 string 相互转化,示例:
str1 = "{'a': 1, 'b': 2}"
json1 = eval(str1)
print(type(json1))
print(json1)
- 从命令行读取
raw_input()
函数会把所有的输入当作原始数据(raw data),然后将其放入字符串中
key = input("输入字符:")
函数会假设用户输入是合法的python表达式
shutil
module很方便,是os模块的补充
- re
import re
re.match(r'^(\d+)(0*)$', '102300').groups()
re.compile(r'^(\d{3})-(\d{3,8})$')
先预编译,然后在match,提高效率
第三方库
- 解析html页面:
from HTMLParser import HTMLParser
- 图像处理标准库:
PIL:Python Imaging Library
- email
- Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件
- Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件。要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的邮件对象
json
模块提供的方法和cPickle模块类似,都有dump,dumps,load,loads方法
- python-socketio
- rq 轻量级的任务队列
- Pillow(PIL)是 Python 图像处理的基础库
- 进度条(Progress Bar)
- xmlrpc
其他
a=0xffff
十六进制表示
- import types types.StringType
- 判断类型用
type()函数
,判断继承类的类型用 isinstance()函数
- type()可以动态创建类,而不需要使用class定义的方式,例如:
type('Hello', (object,), dict(hello=fn))
,通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class
- 元类metaclass:除了使用type()动态创建类以外,要控制类的创建行为,还可以使用metaclass
- 序列化在python中叫
pickling
,其他语言中称为:serialization
,marshalling
- 通常class的实例都有一个
__dict__
属性,它就是一个dict,用来存储实例变量
- 大部分web应用都是IO密集型
- 单进程的异步编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序
- collections模块
- 用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便
- deque 是双向列表,解决了list插入和删除低效的问题
- defaultdict(带默认值的dict) 当key不存在时,不再抛出KeyError,而是返回一个默认值
- OrderedDict,有顺序的dict
- Counter实际上是dict的一个子类
- itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是迭代对象,只有用for循环迭代的时候才真正计算
使用示例
Python 排序
from distutils.version import StrictVersion
# from packaging.version import Version # 建议使用,Version 重新封装
versions = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"]
versions.sort(key=StrictVersion)
versions.sort(key=lambda s: list(map(int, s.split('.'))))
versions_list.sort(key=lambda s: [int(u) for u in s.split('.')])
re 正则表达式
import re
s = 'abc123de'
pattern = re.compile(r'(?P<abc>\d+)(?P<xyz>\D+)')
m = re.search(pattern, s)
m.group('xyz')
m.group('abc')
pickle 示例
- pickle 是一个持久化模块,支持持久化各种数据,适合于Python复杂数据的存贮
- 类似的实现 shelve、cPickle、Json、Protobuf
cPickle
模块是c语言写的,专门处理序列化
cPickle.dumps()
dump成str,cPickle.dump()
dump到文件中,cPickle.loads()
反序列化str成对象,cPickle.load()
从文件中反序列化出对象
import pickle
data = {'str': 'hello world!', 'list': [1, 2, 3, 4]}
# 写示例
with open('data.pickle', 'wb') as f:
pickle.dump(data, f, -1)
# 读示例
with open('data.pickle', 'rb') as f:
data2 = pickle.load(f)
print(data2)
# 复制到变量
obj_bytes = pickle.dumps(data)
json
json
序列化,解决:TypeError: Object of type datetime is not JSON serializable
import json
from datetime import datetime
now = datetime.now()
# set default=str
json_str = json.dumps({'created_at': now}, default=str)
print(json_str) # '{"created_at": "2023-07-19 17:42:13.501631"}'
print(type(json_str)) # <class 'str'>
import json
import base64
import zlib
obj = [1, 2, 3]
base64.b64encode(zlib.compress(str.encode(json.dumps(obj), 'utf-8'), 6))
zlib.decompress(data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)