zoukankan      html  css  js  c++  java
  • Python 常用库

    前言

    之前重写了视频字符画处理的代码,然后这两天又在研究命令行和网络。读了一点开源工具的代码,越来越觉得有必要针对性地学习一下一些重要的基础库。
    这里呢就列个小清单,把我认为有必要学习的库写一下。

    带 [ x ] 的表示已完成

    时间

    1. time:对 c 语言库的封装,优点是速度快。
      • 常用的函数:时间戳 - time.time(),睡眠 - time.sleep()
    2. datetime:时间日期处理库,比 time 更强大,支持在日期上进行各种操作(加减乘除)。
    3. maya/arrow: 第三方时间日期处理库,比 datetime 更好用。

    系统

    1. sys

    用于访问一些由 Python Interpreter 维护的变量,一般都和系统、流、命令行参数之类的相关。

    1. os

    用于使用一些操作系统相关的函数,还有操作系统环境变量。(相关:比如 os.fork 在 windows 上就用不了)

    1. subprocess

    系统调用函数,目的在于取代 os.system 和 os.spwan* 的库,并提供更强大的功能。

    1. pyinvoke: 3rd

    fabric2 的本地方法调用模块,比 subprocess 更强大。

    SSH 远程执行命令

    1. paramiko: 3rd

    Python 的 SSHv2 协议实现。使用 Python 远程执行命令的首选库。

    1. fabric2: 3rd

    构建在 paramiko 和 pyinvoke 之上,提供更方便的远程命令执行功能。(运维用)

    文件路径

    1. [ x ] pathlib

    该模块使用类来表示系统路径,而且是操作系统无关的。终于不需要去管 Windows 和 Linux 下分隔符的差别了。
    更方便的是,路径之间的组合可以直接通过“计算”实现。(它还提供了 glob 简化正则表达式,用于路径匹配)

    1. [ x ] contextlib

    这是一个上下文管理库,可用于自定义能使用 with 上下文管理的类。常用于 网络、数据库连接之类的地方。

    字符串处理

    1. [ x ] re

    正则,不解释

    1. [ x ] io.StringIO io.BytesIO

    提供了一个 str 流对象,可读可写。API 等同于 open() 返回的流对象。类似 Java 的 StringBuffer BytesBuffer

    网络库(客户端)

    1. [ x ] requests: 3rd

    超易用的 http 请求库

    1. urllib

    网络协议处理的标准库(说网络协议,自然不仅 http 了)

    Web 应用框架(服务端)

    1. [ x ] flask: 3rd

    轻量的 web 应用框架(服务端),用来写 RESTful API 特别方便。

    依赖管理、环境隔离

    1. [ x ] pipenv

    环境管理和依赖管理的终极解决方案,缺点是 lock 慢到吐血。

    1. [x] poetry: 比 pipenv 更好用!

    2. [ x ] pip

    依赖管理工具,install uninstall list 都不会用还敢叫 Python 程序员?

    1. setuptools

    项目打包工具,配置项还挺多的,需要用的时候再查文档吧。。

    Python 的依赖管理工具,曾经很混乱。不过现在算是越做越好了。更多的信息参见Python Packaging User Guide

    迭代器、数据结构、高阶函数

    1. [ x ] itertools
    2. [ x ] colletions
    3. [ x ] functools 常和 opreator 一起用

    日志(入门简单,深入有点难。。)

    1. logging

    2. loguru: 3rd

    比 logging 更好用,而且支持彩色日志输出。

    测试(有待提高)

    1. unittest

    官方测试框架,师出 Junit。缺点是繁琐。

    1. [ x ] pytest: 3rd

    看到很多热门开源项目都用的 pytest,有时间得学一下。

    1. mock

    使用最多的替换掉网络请求的方式,几乎所有场景下都可以用。所有网络请求和 rpc 调用等都可以用 mock.patch 来模拟返回值。
    就像用Java的Mockito一样。

    数据转换

    a. 持久化(这个很简单)

    1. [ x ] pickle

    一个对数据进行 object 和 bytes 之间的转化的模块。如果你只需要使用 Python 读取这些数据,用 pickle 会是个很好的选择。

    1. [ x ] json

    和 pickle 很类似,不过它做的是 object 和 json 之间的转化。
    这个模块在网络开发中用得很多。

    b. 数据库(已搞定)

    如果需要保存数据,而且需要对其做更复杂的操作,就需要用到数据库了。

    1. [ x ] sqlite3: Python 自带的文件数据库,用于学习很方便。而且 python 数据库驱动都遵循同一个 dbapi 标准,学会一个就学会了所有。
    2. [ x ] PyMySQL: 3rd MySQL 的第三方连接库,遵循 dbapi 标准。
    3. [ x ] SQLAlchemy:ORM 框架,而且有数据库连接池和详细的日志系统。

    c. 结构化二进制

    1. struct

    执行 Python 对象与 C struct (bytes) 之间的转换,一般用于解析或构建下列数据:
    1. 网络协议中的报文:IP包、TCP/UDP 包
    2. 音乐、视频文件:wav/mp3/mp4/midi 等

    并发并行

    1. multiprocessing

    多进程,由于 GIL 的存在,计算密集型工作用多线程基本没用,这时就需要这个库,或者用 C API.
    另外因为多进程不共享数据,因此需要使用 Queue 或者 Pipe 通信。

    1. threading

    API 和 multiprocessing 非常类似,但是要搞清楚关键区别:一个是进程一个是线程。

    1. [ x ] concurrent.futures

    线程池/进程池,而且提供更高层的抽象。

    进阶:线程池、数据库连接池、消息队列

    异步I/O(适用于网络编程)

    1. asyncio

    协程相当于轻量级线程,特别适用于I/O密集场景。

    任务调度

    我有个个人项目,需要每天定时发送消息。我最初是直接加了个线程来干这个事。。然后我发现了,原来有 scheduler 这个东西。。

    1. apscheduler:支持 asyncio 的 scheduler

    其他(偏向特定领域了,非必要)

    1. 数据分析/机器学习

    1. numpy
    2. pandas
    3. matplotlib

    2. 和 C 语言通信

    和C语言通信一般有两个用途,一是做性能优化,二是用于调用一些不开源的库。

    1. cffi: 3rd 不需要先行编译,可直接在Python里写C代码。而且简单干净。
    2. cython: 3rd 使用特殊语法,可同时调用 C 和 Python。需要性能,就用这个。

    P.S. a. 为啥不说 ctypes: 因为感觉 api 太丑。用 Python 就图个乐子,所以拒。b. C 拓展:考虑到最近很多人都说 PyPy 是未来,很多项目也明确表示支持 PyPy,C拓展方式还是尽量避免。这样以后移植也方便。c. 各方法优缺点分析

  • 相关阅读:
    NS2仿真:公交车移动周期模型及性能分析
    oracle 列行转换
    oracle dmp文件导出与导入
    fire workflow总结
    install mysql on centos7
    java反射机构应用
    table行颜色设置
    maven无法下依赖jar文件的解决方案
    windows环境jprofiler配置监控tomcat
    CAS tomcat6搭建
  • 原文地址:https://www.cnblogs.com/kirito-c/p/9098270.html
Copyright © 2011-2022 走看看