一. uos - 基本系统服务
导入模块
import uos
1. 获取当前路径
uos.getcwd()
2. 列出目录文件
uos.listdir( [dir] )
没有参数列出当前目录文件,否则列出给定目录的文件。dir为可选参数,表示目录名,默认为 ‘/’ 目录。
3. 改变当前目录
uos.chdir(path)
4. 创建一个新的目录/文件
uos.mkdir(path)
创建一个新的目录。path表示准备创建的目录名。
5. 重命名目录/文件
uos.rename(old_path, new_path)
重命名文件。old_path表示旧文件或目录名,new_path表示新文件或目录名。
6. 删除指定目录
uos.rmdir(path)
7. 删除文件
uos.remove(path)
8. 文件/目录 三元组(或四元组)迭代器
uos.ilistdir( [dir] )
dir为可选参数,表示目录名,没有参数时,默认列出当前目录,有参数时,则列出dir参数指定的目录。
该函数返回一个迭代器,该迭代器会生成所列出条目对应的三元组(或者四元组,对EC600S来说是四元组)。
三元组(或四元组)结构(name, type, inode[, size]):
- name 是条目的名称,字符串类型,如果dir是字节对象,则名称为字节;
- type 是条目的类型,整型数,0x4000表示目录,0x8000表示常规文件;
- 是一个与文件的索引节点相对应的整数,对于没有这种概念的文件系统来说,可能为0;
- 一些平台可能会返回一个4元组,其中包含条目的size。对于文件条目,size表示文件大小的整数,如果未知,则为-1。对于目录项,其含义目前尚未定义。
例如:
import uos
print(uos.getcwd())
for item in uos.ilistdir():
print(item)
9. 获取文件或目录的状态
uos.stat(path)
获取文件或目录的状态。path表示文件或目录名。返回值是一个元组,返回值形式为:
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)
mode – inode保护模式
ino – inode节点号
dev – inode驻留的设备
nlink – inode的链接数
uid – 所有者的用户ID
gid – 所有者的组ID
size – 文件大小,单位字节
atime – 上次访问的时间
mtime – 最后一次修改的时间
ctime – 操作系统报告的“ctime”,在某些系统上是最新的元数据更改的时间,在其它系统上是创建时间,详细信息参见平台文档
这个我在EC600S上打印的数据不对, 没深究
10. 获取文件系统状态信息
uos.statvfs(path)
path表示文件或目录名。返回一个包含文件系统信息的元组
(f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax)
f_bsize – 文件系统块大小,单位字节
f_frsize – 分栈大小,单位字节
f_blocks – 文件系统数据块总数
f_bfree – 可用块数
f_bavai – 非超级用户可获取的块数
f_files – 文件结点总数
f_ffree – 可用文件结点数
f_favail – 超级用户的可用文件结点数
f_flag – 挂载标记
f_namemax – 最大文件长度,单位字节
11. 获取关于底层信息或其操作系统的信息
uos.uname()
获取关于底层信息或其操作系统的信息。返回一个元组,形式为:
(sysname, nodename, release, version, machine)
- sysname – 底层系统的名称,string类型
- nodename – 网络名称(可以与 sysname 相同) ,string类型
- release – 底层系统的版本,string类型
- version – MicroPython版本和构建日期,string类型
- machine – 底层硬件(如主板、CPU)的标识符,string类型
12. 随机bytes
返回具有n个随机字节的bytes对象,只要有可能,它就会由硬件随机数生成器生成。
uos.urandom(n)
我不知道这是干啥用的
二. ubinascii 进制与转换模块
导入模块
import ubinascii
1. 编码base64数据
ubinascii.b2a_base64(data)
以base64格式编码二进制数据,返回编码数据。后面跟换行符,作为 bytes 对象。
2. 解码base64编码的数据
ubinascii.a2b_base64(data)
解码base64编码的数据,会自动忽略输入中的无效字符,返回 bytes 对象。
3. 将二进制数据转换为十六进制字符串表示
ubinascii.hexlify(data, [sep])
指定了第二个参数sep,它将用于分隔两个十六进制数
4. 将十六进制形式的字符串转换成二进制形式的字符串表示
ubinascii.unhexlify(data)
三. random 随机模块
导入模块
import urandom
1. 随机0 到 1 之间的浮点数
urandom.random()
2. 随机生成一个 start 到 end 之间的整数
urandom.randint(start, end)
3. 随机生成 start 到 end 间并且递增为 step 的正整数
urandom.randrange(start, end, step)
#例如: 取1~100间的偶数
urandom.randrange(0, 100, 2)
4. 随机生成 start 到 end 范围内的浮点数
urandom.uniform(start, end)
5. 随机取数
urandom.choice(obj)
随机取 obj 中的元素, obj是一个容器
6. 随机产生一个在n bits范围内的数。
urandom.getrandbits(n)
#例如:
urandom.getrandbits(8) #取8位二进制位范围内的数 (返回结构默认十进制)
7. 随机数种子
urandom模块使用Mersenne Twister算法来计算生成随机数。这是一个确定性算法,可以通过random.seed()函数修改初始化种子.
简单来说,用了随机数种子后, 同一段代码每次随机都是确定的随机值
import urandom
urandom.seed(20)
for i in range(3):
print(urandom.random())
四. math 数学运算
导入模块
import math
常亮 | 说明 |
---|---|
math.e | 数学常量 e |
math.pi | 圆周率 |
方法 | 说明 |
---|---|
math.ceil(x) | 向上取整 |
math.floor(x) | 向下取整 |
math.trunc(x) | 返回x的整数部分 |
math.fmod(x, y) | 返回x/y的余数,返回值为浮点数 |
math.modf(x) | 返回由x的小数部分和整数部分组成的元组。 |
math.fabs(x) | 绝对值 |
math.isfinite(x) | 判断 x 是否为有限数,是则返回True,否则返回False。 |
math.isinf(x) | 判断x是否是正无穷大或负无穷大,则返回True,否则返回False。 |
math.isnan(x) | x是不是数字,返回True,否则返回False。 |
math.sqrt(x) | 返回数字x的平方根,返回值为浮点数 |
math.pow(x, y) | 返回x的y次方,返回值是浮点数。 |
math.degrees(x) | 将弧度转换为角度,返回值为浮点数 |
math.radians(x) | 将角度转换为弧度,返回值为浮点数 |
math.sin(x) | 返回x弧度的正弦值,数值在 -1 到 1 之间 |
math.cos(x) | 返回x弧度的余弦值,数值在 -1 到 1 之间 |
math.tan(x) | 返回 x 弧度的正切值,数值在 -1 到 1 之间,为浮点数 |
math.asin(x) | 返回x的反正弦弧度值,返回值为浮点数。x是-1~1之间的数,包括-1和1 |
math.acos(x) | 返回x的反余弦弧度值,返回值为浮点数。x是-1~1之间的数,包括-1和1 |
math.atan(x) | 返回x的反正切弧度值,返回值为浮点数 |
math.atan2(x, y) | 返回给定的 X 及 Y 坐标值的反正切值,返回值为浮点数 |
math.log(x) | 返回x的自然对数,x > 0,小于0会报错 |
math.copysign(x, y) | 把y的正负号加到x前面,可以使用0,返回值为浮点数。 |
math.ldexp(x, exp) | math.ldexp()方法返回给定数字x和i的x * (2 ** i),这是math.frexp()的反函数 |
五. ujson - JSON编码和解码
ujson 模块实现在Python数据对象和JSON数据格式之间进行转换的功能。
import ujson
1. ujson.dump(obj, stream)
将 obj 数据对象转化成 JSON字符串,将其写入到给定的 stream 中
2. ujson.dumps(dict)
将 dict 类型的数据转换成JSON字符串
3. ujson.load(stream)
解析给定的数据 stream,将其解释为JSON字符串并反序列化成Python对象。
4. ujson.loads(str)
解析JSON字符串并返回obj对象
六. utime - 与时间相关功能
utime 模块用于获取当前时间和日期、测量时间间隔和延迟。
import utime
1. utime.localtime([secs]) 时间戳转时间元组
该函数用来将一个以秒表示的时间转换为一个元组,元组包含了了年、月、日、时、分、秒、星期、一年中第几天;如果没有给定参数sec,则使用RTC时间。返回值形式如下:
(year, month, mday, hour, minute, second, weekday, yearday)
- year :年份,int型
- month :月份,1~12,int型
- mday :日,当月多少号,1~31,int型
- hour :小时,0~23,int型
- minute :分钟,0~59,int型
- second :秒,0~59,int型
- weekday :星期,周一到周日是0~6,int型
- yearday :一年中的第多少天,int型
2. utime.mktime(datetime) 时间元组转时间戳
该函数作用与locatime()相反,它将一个存放在元组中的时间转换为以秒计的时间戳
3. utime.sleep(seconds) /utime.sleep_us(us) 休眠给定的时间
注意:sleep()函数的调用会导致程序休眠阻塞。
4. utime.time()
返回自纪元以来的秒数(以整数形式)。如果未设置RTC,则此函数返回自特定于端口的参考时间点以来的秒数(对于不具有电池后备RTC的嵌入式板,通常是由于加电或复位)。如果要开发可移植的MicroPython应用程序,则不应依赖此功能提供高于秒的精度。如果需要更高的精度,请使用 ticks_ms()和ticks_us()函数,如果需要日历时间,则 localtime()不带参数会更好。
4. utime.ticks_ms() / utime.ticks_us()
返回不断递增的毫秒/微秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 ticks_diff()函数中。
5 . utime.ticks_cpu()
和 ticks_ms/ticks_us 类似,具有更高精度 (使用 CPU 时钟)。
6. utime.ticks_diff(ticks1, ticks2)
计算两次调用 ticks_ms(), ticks_us(),或 ticks_cpu()之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 ticks_diff() 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 ticks_*() 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用。
七. sys 模块
sys 模块中提供了与QuecPython运行环境有关的函数和变量
import sys
参数 | 说明 |
---|---|
sys.implementation | 当前microPython版本信息 |
sys.byteorder | 字节顺序 (‘little’ - 小端, ‘big’ - 大端) |
sys.maxsize | 本机整数类型可以在当前平台上保留的最大值,如果它小于平台最大值,则为MicroPython整数类型表示的最大值 |
sys.argv | 当前程序启动的可变参数列表。 |
sys.modules | 已载入模块的字典 |
sys.platform | MicroPython运行的平台 |
sys.version | MicroPython 语言版本,字符串格式。 |
sys.version_info | MicroPython 语言版本,整数元组格式。 |
sys.stdin | 标准输入(默认是USB虚拟串口,可选其他串口) |
sys.stdout | 标准输出(默认是USB虚拟串口,可选其他串口) |
方法 | 说明 |
---|---|
sys.exit(retval=0) | 使用给定的参数退出当前程序。与此同时,该函数会引发SystemExit退出。如果给定了参数,则将其值作为参数赋值给SystemExit |
sys.print_exception(exc, file=sys.stdout) | 打印异常到文件对象,默认是 sys.stdout,即输出异常信息的标准输出。 |
八. uhashlib - 哈希算法
实现二进制数据散列算法,目前支持sha256,sha1,MD5。
import uhashlib
1. 创建哈希对象
hash_obj = uhashlib.sha256(bytes)
hash_obj = uhashlib.sha1(bytes)
hash_obj = uhashlib.md5(bytes)
2. 更多的bytes数据加到散列
hash_obj .update(bytes)
3. 返回加密后字节类型的数据
返回通过哈希传递的所有数据的散列,数据为字节类型。调用此方法后,无法再将更多的数据送入散列
hash_obj .digest()
import uhashlib
import ubinascii
hash_obj = uhashlib.sha256() # 创建hash对象
hash_obj.update(b"QuecPython")
res = hash_obj.digest()
# b"\x1e\xc6gq\xb3\xa9\xac>\xa4\xc4O\x00\x9eTW\x97\xd4.\x9e}Bo\xff\x82u\x89Th\xfe'\xc6\xcd"
# 转成十六进制表示
hex_msg = ubinascii.hexlify(res)
# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd'
九. _thread - 多线程
_thread 模块提供创建新线程的方法,并提供互斥锁, 关于他的用法, 后续会有专门的介绍