文章目录
datatime
timestamp时间戳为当前时间相对于epoch time的秒数
from datetime import datetime now = datetime.now() # 获取当前时间,如 2021-03-02 11:05:39.725109 dt = datetime(2021, 3, 2, 11, 5) # 创建指定时间 timestamp = dt.timestamp() # datetime转换为timestamp dt = datetime.fromtimestamp(timestamp) # timestamp转换为当前系统时区的datetime datetime.strptime('2021-03-02 11:05:39', '%Y-%m-%d %H:%M:%S') # str转datetime datetime.now().strftime('%Y-%m-%d %H:%M:%S') #datetime转str from datetime import timedelta now + timedelta(days=2, hours=12) # 增加时间
时间转格式符
%a 英文星期简写 %A 英文星期的完全 %b 英文月份的简写 %B 英文月份的完全 %c 显示本地日期时间 %d 日期,取1-31 %H 小时, 0-23 %I 小时, 0-12 %m 月, 01 -12 %M 分钟,1-59 %j 年中当天的天数 %w 显示今天是星期几 %W 第几周 %x 当天日期 %X 本地的当天时间 %y 年份 00-99间 %Y 年份的完整拼写
collections
namedtuple
可命名元组,创建自定义tuple对象,并规定tuple元素个数,并可以用索引进行引用。
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(1, 2) p.x
deque
双向列表,适合用于队列和栈
from collections import deque q = deque(['a', 'b', 'c']) q.append('x') # pop q.appendleft('y') # popleft q.clear() # 清空队列元素
defaultdict
默认字典,当key不存在时,能返回默认值
from collections import defaultdict dict = defaultdict(factory_function) # factory_function可以是list、set、str、int等等,作用是当key不存在时,返回factory_function的默认值 # list对应[ ],str对应的是'',set对应set( ),int对应0 dict = defaultdict(int) # 当key不存在时,默认返回0
OrderedDict
有序字典,保持key的顺序,按插入顺序排序
Counter
计数器,dict的子类,用来进行hashtable计数,将元素进行数量统计,计数后返回一个字典
from collections import Counter c = Counter() # 创建空的Counter,或传入字符串、字典、元组、列表 c[key] # 获取key的计数 del c[key] # 删除元素 list(c.elements()) # 获得所有元素 c.most_common(k) # 最常见的k个元素
random
import random random.random() # 返回随机生成的一个实数,它在[0,1)范围内 random.randint(0,9) # 返回随机数,范围在[0,9] random.sample(range(low,high),N) # 表示从[low, high]区间随机生成N个数,结果以列表返回
base64
import base64 base64.b64encode(b'binary string') base64.b64decode(b'YmluYXJ5IHN0cmluZw==') # 标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数 base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff') #urlsafe_b64encode 把结果中字符+和/分别变成-和_ # 由 b'abcd++//' 变为 b'abcd--__'
Base64编码的长度永远是4的倍数,因此,需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了。
常用于在URL、Cookie、网页中传输少量二进制数据。
struct
来解决bytes和其他二进制数据类型的转换
https://www.liaoxuefeng.com/wiki/1016959663602400/1017685387246080
hashlib
import hashlib md5 = hashlib.md5() sha1 = hashlib.sha1() md5.update('how to use md5 in '.encode('utf-8')) md5.update('python hashlib?'.encode('utf-8')) # 如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的 print(md5.hexdigest())
md5 128bit 32位16进制字符串表示
sha1 160bit 40位16进制字符串表示
加盐:md5(message + salt)
hmac
实现带key的哈希(加盐)
import hmac message = b'Hello, world!' key = b'secret' h = hmac.new(key, message, digestmod='MD5') # 如果消息很长,可以多次调用h.update(msg) h.hexdigest()
itertools
提供用于操作迭代对象的函数
import itertools natuals = itertools.count(1) # 自然数序列迭代器 1, 2, 3, 4, 5,... cs = itertools.cycle('ABC') # 无限重复序列 'A','B','C','A','B',.. ns = itertools.repeat('A', 3) # 重复元素,不指定次数则无线重复 ns = itertools.takewhile(lambda x: x <= 10, natuals) # 截取有限序列 for c in itertools.chain('ABC', 'XYZ') # 串联一组迭代对象 'A','B','C','X','Y',.. for key, group in itertools.groupby('AAABBBCCAAA') # 相邻的重复元素挑出来放在一起 # A ['A', 'A', 'A'] # B ['B', 'B', 'B'] # C ['C', 'C'] # A ['A', 'A', 'A'] # 可以加入函数作为参数,只要作用于函数的两个元素返回的值相等就可以被归为一组
logging
参考资料:https://blog.csdn.net/pansaky/article/details/90710751
基本使用
import logging logging.info('info') # 输出日志 logging.basicConfig(level=loggging.INFO) # 设置日志级别,只显示不低于设置级别的日志,默认为warning # 级别排序 fatal > critical > error > warning > info > debug # basicConfig参数设置 format 设置输出的格式 %(levelno)s:打印日志级别的数值 %(levelname)s:打印日志级别的名称 %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0] %(filename)s:打印当前执行程序名 %(funcName)s:打印日志的当前函数 %(lineno)d:打印日志的当前行号 %(asctime)s:打印日志的时间 %(thread)d:打印线程ID %(threadName)s:打印线程名称 %(process)d:打印进程ID %(message)s:打印日志信息 filename 指定日志文件名 filemode 'w'或'a'
日志写入文件 — 使用handler
logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # 创建logger handler = logging.FileHandler('./log.txt','w') # 创建handler handler.setLevel(logging.INFO) # 级别不能比logger小,否则没有日志 handler.setFormatter(logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")) # 定义输出格式 logger.addHandler(handler)