Python 常见库

发布时间: 更新时间: 总字数:2862 阅读时间:6m 作者: 分享 复制网址

Python 常见库

介绍

标准库

  • Python 标准库官网
  • os
    • os.name 字符串指示你正在使用的平台。比如对于Windows,它是’nt’,而对于Linux/Unix 用户,它是’posix'
    • os.getcwd()函数得到当前工作目录,即当前Python 脚本工作的目录路径
    • os.getenv()os.putenv()函数分别用来读取和设置环境变量
    • os.listdir()返回指定目录下的所有文件和目录名
    • os.remove()函数用来删除一个文件
    • os.system()函数用来运行shell 命令
    • os.stat 执行 stat 信息
      • st_mode: inode 保护模式
      • st_ino: inode 节点号
      • st_dev: inode 驻留的设备
      • st_nlink: inode 的链接数
      • st_uid: 所有者的用户ID
      • st_gid: 所有者的组ID
      • st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据
      • st_atime: 上次访问的时间
      • st_mtime: 最后一次修改的时间
      • st_ctime: 由操作系统报告的 ctime
  • six : 专门用来兼容 Python 2 和 Python 3 的库。解决了如 urllib 的部分方法不兼容, strbytes 类型不兼容等问题
  • 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表达式
  • psutil 用来获取操作系统以及硬件相关的信息,比如:CPU、磁盘、网络、内存等
  • shutil module很方便,是os模块的补充
  • re
    • import re re.match(r'^(\d+)(0*)$', '102300').groups()
    • re.compile(r'^(\d{3})-(\d{3,8})$') 先预编译,然后在match,提高效率
  • requests
    • requests.get("http://example.org", proxies={"https": "http://10.10.10.10:1080"})
  • configparser 读取config或ini配置文件
  • http
    • http.client
  • fcntl 文件的加锁与解锁
  • heapq Heap queue algorithm 该模块提供了堆队列算法的实现,也称为优先级队列算法。
  • operator Standard operators as functions
  • string 可打印字符
import string

s = "some\x00string. with\x15 funny characters"
printable = set(string.printable)
''.join([i for i in filter(lambda x: x in printable, s)])

# 'somestring. with funny characters'
  • weakref 弱引用
    • Python 的垃圾回收机制会自动回收没有被引用的对象,通过引用计数来标记清除
    • 弱引用不会增加对象的引用数量
    • 弱引用一般使用在缓存应用中
    • 创建弱引用对象:weakref.ref(object[, callback])
    • weakref.proxy(object[, callback]) proxy相比ref获取的对应,可以省去函数调用
    • weakref.WeakKeyDictionary([dict]) 当key不在有引用计数时,key-value自动在字典中删除
    • weakref.WeakValueDictionary([dict]) 当value不在有引用计数时,key-value自动在字典中删除
    • weakref.finalize(object, callback, callparams) 标志原始对象的销毁
    • weakref.getweakrefcount(object) 获取弱引用计数

第三方库

  • 解析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)
  • pprint 美化输出
  • xmlrpc
  • Traitlets 允许 Python 自定义类拥有类型检查(@default)动态计算默认值(@observe)Change回调(@validate)这三种特性
    • tempfile 创建临时文件和文件夹
    • retrying 提供 @retry() 装饰器
    • curlify 输出 requesty 包的 curl 实现
  • serial 与串口通信的模块
  • attrs 面向对象编程OOP

yaml

  • old.yaml
data:
  name: "中国"
  cityName: "上海"
  • 转化
import yaml


with open('old.yaml', 'r', encoding='utf-8') as f:
  content = yaml.safe_load(f.read())

with open('new.yaml', 'a', encoding='utf-8') as fw:
  yaml.dump(content, fw, allow_unicode=True)  # allow_unicode=True 解决 yaml 中文乱码

其他

  • 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,其他语言中称为:serializationmarshalling
  • 通常class的实例都有一个__dict__属性,它就是一个dict,用来存储实例变量
  • 大部分web应用都是IO密集型
  • 单进程的异步编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序
  • collections模块
    • 用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便
    • deque 是双向列表,解决了list插入和删除低效的问题
    • defaultdict(带默认值的dict) 当key不存在时,不再抛出KeyError,而是返回一个默认值
    • OrderedDict,有顺序的dict
    • Counter实际上是dict的一个子类
  • itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是迭代对象,只有用for循环迭代的时候才真正计算
    • groupby 等方法

使用示例

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 正则表达式

  • (?P...) 命名组
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)

xmlrpc

  • server.py
from xmlrpc.server import SimpleXMLRPCServer

# 创建一个服务器实例
server = SimpleXMLRPCServer(("0.0.0.0", 8000))

def add(args):
    return args[0] + args[1]

# 注册函数到服务器
server.register_function(add)

# 开始监听请求
print("Listening on port 8000...")
server.serve_forever()
  • client.py
from xmlrpc.client import ServerProxy

# 创建一个代理对象,连接到服务器
proxy = ServerProxy("http://localhost:8000")

# 调用服务器上的 add 函数
result = proxy.add([2, 3])

# 打印结果
print(result)  # 输出: 5

unicode

\u 开头的 unicode 转中文

# python3
i.encode('utf-8').decode('unicode_escape')  # i = '\u751F\u5316\u5371\u673A'

# python2
i.decode('unicode-escape')
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数