python标准库之其他

bisect

bisect是二分法的意思。bisect库常用于有序序列的查找和插入。

1、查找

1
2
3
4
5
6
7
8
9
import bisect

a = [1,4,6,8,12,15,20]
position = bisect.bisect(a, 13)
print(position)

# 用可变序列内置的insert方法插入
a.insert(position, 13)
print(a)

2、插入

1
2
3
4
5
import bisect

a = [1,4,6,8,12,15,20]
bisect.insort(a,13)
print(a)

golb

glob模块是python自己带的一个文件操作模块,可以查找符合自己需求的的文件,并且支持通配符操作。

案例1:当前路径文件下以.py结尾的所有文件

1
2
3
4
import glob

for fname in glob.glob("./*.py"):
print(fname)

案例2:当前路径文件下以python开头并且有一个字符的所有py文件

1
2
3
4
import glob

for fname in glob.glob("./python?.py"):
print(fname)

案例3:当前路径文件下以python开头并且有一个数字的所有py文件

1
2
3
4
import glob

for fname in glob.glob("./python[0-9].py"):
print(fname)

sched

Python自带一个调度器模块sched,它能实现优先级队列/延迟队列和定时队列。

1、延迟队列/延迟队列

1
2
3
4
5
6
7
8
import sched

def do_work(name):
print(f'你好:{name}')

sch = sched.scheduler()
sch.enter(5, 1, do_work, argument=('Tyler', )) # 第一个参数为延迟的时间,单位为秒,第二个参数为优先级,数字越小优先级越高
sch.run()

只有当两个任务同时运行的时候,才会去检查优先级。”同时运行”的意思是必须是精确时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
import sched
import time
import datetime

def do_work(name):
print(f'你好:{name}')

sch = sched.scheduler(time.time, time.sleep)
start_time = datetime.datetime.now() + datetime.timedelta(seconds=3)
start_time_ts = start_time.timestamp()
sch.enterabs(start_time_ts, 2, do_work, argument=('Tom', ))
sch.enterabs(start_time_ts, 1, do_work, argument=('Tyler', )) # 优先级更高
sch.run()

2、定时队列

1
2
3
4
5
6
7
8
9
10
11
12
13
import sched
import time
import datetime

def do_work(name, place):
print(f'你好:{name},你在:{place}')

sch = sched.scheduler(time.time, time.sleep)
start_time = datetime.datetime.now() + datetime.timedelta(seconds=3)
start_time_ts = start_time.timestamp()
sch.enter(3, 2, do_work, argument=('Tyler', 'beijing'))
sch.enterabs(start_time_ts, 1, do_work, argument=('Tom', 'shanghai')) # 定时队列,第一个参数是任务开始时间的时间戳,这是一个绝对时间
sch.run()

secrets

secrets是一个用于生成秘钥的库。

1
2
3
4
5
from secrets import token_bytes, token_hex, token_urlsafe

print(token_bytes(10))
print(token_hex(10))
print(token_urlsafe(10))