python的电池——内置模块

小编 2026-06-27 阅读:1052 评论:0
本博客只为汇总内置模块的基本用法,方便查阅。 目录 datetime:        处理时间和日期 collections:     集合模块 base64:       64个字符表示二进制数据...

本博客只为汇总内置模块的基本用法,方便查阅。

目录

datetime:        处理时间和日期

collections:     集合模块

base64:       64个字符表示二进制数据

Struct:            操作字节的模块

hashlib:          摘要算法模块

hmac:             标准加盐算法模块

itertools:         迭代工具模块

contextlib:      上下文模块

urllib:              提供http请求的模块

xml:                解析xml格式数据的模块

HTMLParser: 解析HTML的模块


 

datetime: 处理时间和日期

  • 导入 from datetime import datetime, timedelta, timezone
  • datetime.now() 获取当前时间,没有时区信息tzinfo=None,表示本地时间
  • datetime(2018,12,23,10,24) 创建指定本地时间
  • datetime对象.timestamp() 日期时间对象转换成timestamp, timestamp是相对UTF+0的,本地时间就是自己电脑所在时区去转,设置了tzinfo信息的,就按照设置的时区去转。理论上来说,世界上所有电脑在同一时刻,得到的本地时间会因时区有差异,但是timestamp都是相同的。
  • datetime.fromtimestamp(111111.0) 把timestamp转为本地时间
  • datetime.utcfromtimestamp(1111111.0) 把timestamp转为UTF+0时区的时间
  • datetime.strptime(\'2018-12-23 10:37:59\', \'%Y-%m-%d %H:%M:%S\') 把字符串按照指定格式,转为本地时间 str parse time
  • datetime对象.strftime(\'%a, %b %d %H:%M\') 把本地时间按照指定格式,转为字符串 str from time
  • datetime对象 + timedelta(days=2, hours=12) 时间的加减,需要用timedelta 就像Java的Calendar类做的一样
  • datetime对象.replace(tzinfo=timezone(timedelta(hours=10))) 设置时区信息 需要用到timezone, 而timezone需要用到tiemdelta. 另外 tzinfo关键字参数就是timezone information时区信息的意思
  • datetime对象.astimezone(timezone(timedelta(hours=8))) 根据设置的时区信息,修改datetime对象的值。也就是时间在不同时区的转换。

collections: 集合模块

  • namedtuple 给tuple命名并且可以依靠属性访问
from collections import namedtuple
Point = namedtuple(\'point\', [\'x\', \'y\'])
p = Point(1,2)
print(p)
print(p.x, p.y)
  • deque 双向链表,支持头尾高效插入删除
from collections import deque
q = deque([\'a\', \'b\', \'c\'])  #左右头尾插入删除
q.append(\'d\')
q.appendleft(\'A\')
q.pop()
q.popleft()
  • OrderedDict 按插入顺序排序的dict, 还可以按栈或队列的方式删除
from collections import OrderedDict
od = OrderedDict([(\'a\',1), (\'d\',2), (\'c\',3)]) #按插入顺序排序的dict
od[\'b\'] = 4             #添加
od.pop(\'a\')             #删除
od.popitem(last=False)            #last=False采用FIFO队列弹出,last=True采用LIFO栈弹出
  • ChainMap 把几个dict串联起来,按左高右低的优先级查找
from collections import ChainMap
da = {\'a\':1, \'b\':2}
db = {\'c\':3, \'a\':2}
cm = ChainMap(da, db) #优先查da,没有再查db
print(cm[\'a\'], cm[\'c\'])
  • Counter 计数器,很方便的完成计数,不用自己去看到底在不在里面,封装好了
from collections import Counter
c = Counter()   #计数器 是一个dict的子类
for ch in \'I love python\':
    c[ch] = c[ch] + 1           #这一句搞定计数
print(c)

base64:64个字符表示二进制数据

64个字符可以表示6bit的数据,所以把二进制数据每6bit换成一个字符即可。这样3个字节的二进制数据经过base64编码后,变成4个字节的可显示字符数据。长度不是3的倍数就用\\x00补齐,然后编码末尾用=指示补了多少个字节

  • base64.b64encode(b\'abcde\') 把二进制数据编码成base64数据
  • base64.b64decode(b\'YWJjZGU=\') 把base64数据解码成二进制数据
  • base64.urlsafe_b64encode(b\'abcde\') 把二进制数据编码成url安全的base64数据,也就是+和/ 换成 -和_
  • base64.urlsafe_b64decode(b\'YWJjZGU=\')  把url安全的base64数据解码成二进制数据

Struct: 操作字节的模块

封装了对python数据类型的字节操作,在对字节流性能要求不高的时候,可以使用。类型表示见官方文档

  • struct.pack(\'>IH\', 1234567, 22)  >大端序(网络序,高位在前,符合人的习惯) I表示4字节整数 H表示2字节整数。表示把这两个数字按照前面指定的方式提取出字节表示 b\'\\x00\\x12\\xd6\\x87\\x00\\x16\'
  • struct.unpack(\'>IH\', b\'\\x00\\x12\\xd6\\x87\\x00\\x16\') 按照指定的方式,从字节流中提取出数据。(1234567, 22)

hashlib: 摘要算法模块

把任意长度的数据转换成一个固定长度的数据。属于不可逆算法,所以可以用来做加密工作。

  • update() 向摘要算法提供需要摘要的原始数据
  • hexdigest() 计算并返回摘要

MD5:

import hashlib
md = hashlib.md5()             #找到md5对象
md.update(\'今天你会不会嫁给我\'.encode(\'utf-8\'))     #更新md5值
md.update(\'abcde\'.encode(\'utf-8\')) #重复的调用等价于连接所有参数的单个调用:m.update(a);m.update(b)等价于m.update(a+b)
md.hexdigest()                  #获取md5计算结果 128bit 32个16进制数

SHA1:用法和MD5完全一样

import hashlib
sha = hashlib.sha1()
sha.update(\'今天你会不会嫁给我\'.encode(\'utf-8\'))
sha.update(\'abcde\'.encode(\'utf-8\'))
sha.hexdigest()                 #获取sha1摘要结果 160bit 40个16进制数

hmac: 标准加盐算法模块

一般为了防止密码被破解,会用password + salt 然后再hash。这么做太简陋了,hmac就是把这个简单的加法变复杂的一个模块。

import hmac
h = hmac.new(b\'secret\', b\'hello, world\', digestmod=\'MD5\') #第一个参数就是所谓的salt或者key 第二个是要加密的数据
h.update(b\' you\')
h.hexdigest()

itertools: 迭代工具模块

  • 导入 import itertools
  • itertools.count(-1, 2) 返回从-1开始每次+2的Iterator对象,因为是无限迭代,所以就是一个generator。
  • itertools.cycle(\'AB\') 返回无限重复的\'A\' \'B\'
  • itertools.repeat(\'ABC\', 3) 返回重复3次的\'ABC\' iterator
  • itertools.takewhile(lambda x: x <= 10, natural) natural可以是上面的无限迭代生成器, takewhile指定停止条件
  • itertool.chain(i1, i2) 把i1, i2两个iterator 连接起来,返回一个更大的itrator 
  • itertools.groupby(\'AaaBBbcCAAa\', lambda c: c.upper()) 按相邻元素是否一样分组,分组前可做映射

contextlib: 上下文模块

这个模块主要是管理资源的,一个对象创建的时候获取资源,销毁的时候释放资源。本来是通过魔法方法__enter__和__exit__配合with管理的。contextlib模块提供了装饰器来支持更加简便的管理。

  • @contextmanager 即使不实现__enter__和__exit__也可以通过with去自动释放
from contextlib import contextmanager
class Person(object):

    def __init__(self, name):
        self.name = name
        print(\'init\')

    def me(self):
        print(\'my name is %s...\' % self.name)

@contextmanager #和用魔法方法实现不同,这里Begin会在初始化之前执行, 不过不重要,因为with主要是释放资源嘛
def create_person(name):
    print(\'Begin\')
    yield Person(name)
    print(\'End\')

with create_person(\'小明\') as p:
    p.me()

Output:
Begin
init
my name is 小明...
End
  • closing() 让没有实现上下文的对象,但却实现了close()方法的对象也能用with自动释放
@contextmanager
def closing(thing):
    try:
        yield thing    #就和我们自己写的create_Person一模一样 用的使用需要import closing
    finally:
        thing.close()

urllib: 提供http请求的模块

  • 导入 from urllib import request
  • request.urlopen(\'https://www.baidu.com\') 发送http请求到指定url,然后返回该请求的返回
from urllib import request

with request.urlopen(\'https://www.baidu.com\') as f:
    data = f.read()            #注意这里data是二进制编码的utf-8数据
    print(\'Status:\', f.status, f.reason)
    for k, v in f.getheaders():
        print(\'%s: %s\' % (k, v))
    print(\'Data:\', data.decode(\'utf-8\'))    #直接显示需要解码,如果是json数据还需要loads
  • request.add_header(...)  添加http请求头信息 我暂时没用过 来把程序的请求伪装的像是真的通过人去点的一样

xml: 解析xml格式数据的模块

比解析json数据复杂太多了

xml = r\'\'\'<?xml version=\"1.0\"?>
<ol>
    <li><a href=\"/python\">Python</a></li>
    <li><a href=\"/ruby\">Ruby</a></li>
</ol>
\'\'\'

from xml.parsers.expat import ParserCreate

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)

parser = ParserCreate()
parser.StartElementHandler = start_element
parser.EndElementHandler = end_element
parser.CharacterDataHandler = char_data
parser.Parse(xml)

HTMLParser: 解析HTML的模块

官方文档连接

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        print(\'<%s %s>\' % (tag, attrs))

    def handle_endtag(self, tag):
        print(\'</%s>\' % tag)

    def handle_startendtag(self, tag, attrs):   #因为html没有xml严格 所以要解析的东西就多,就会有这种开头结尾在一起的标签
        print(\'<%s %s/>\' % (tag, attrs))

    def handle_data(self, data):
        print(data)

    def handle_comment(self, data):     #注释
        print(\'<!--\', data, \'-->\')

    def handle_entityref(self, name):   #字符实体 如 &nbsp   只有charref为False时,才会调用
        print(\'&%s;\' % name)

    def handle_charref(self, name):     #数字实体 如 &#1234
        print(\'&#%s;\' % name)

parser = MyHTMLParser(convert_charrefs=False)
parser.feed(\'\'\'<html>
<head></head>
<body>
<!-- test html parser -->
    <p>Some <a href=\\\"#\\\">html</a> HTML&nbsp;&#2555;tutorial...<br>END</p>
</body></html>\'\'\')

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表