本地持久化文件系统
在设备重启后仍保留数据,常需持久化存储。传统计算机用命名文件与目录组织数据;Python 提供相应操作接口。
micro:bit 硬件与存储容量有限,BiBoPython 只提供持久化所需的一小部分能力。文件系统可用空间约 30 KB。
BiBoPython 提供扁平文件系统:无目录层级,仅为命名文件列表。读写通过标准 open() 及返回的 TextIO / BytesIO 对象完成。列出、删除等操作见 os 模块。
以 .py 结尾的文件可被导入,例如 hello.py 可 import hello。
open(filename, mode='r')
返回表示 filename 的文件对象。默认 mode='r' 为文本只读;'w' 为写入(已存在则覆盖)。可与 't'(文本)或 'b'(二进制)组合,默认文本模式。文本模式返回 TextIO,二进制模式返回 BytesIO,例如 'rb' 读取二进制。
参数
filename:文件名。mode:打开模式。
类 TextIO / BytesIO
表示 flat 文件系统中的文件。TextIO 处理字符串,BytesIO 处理字节,接口相同。不要直接实例化,应通过 open() 获取。
close()
刷新并关闭文件。已关闭时无效果;关闭后读写会抛异常。
name()
返回值:文件名,与传入 open() 的 filename 相同。
read(size)
读取最多 size 个字符或字节。省略 size 或 -1 时读取全部。若返回 0 且 size 非 0,表示已到文件末尾。
若 size 大于可用 RAM,会抛出 MemoryError。
参数
size:读取长度,可选。
readinto(buf, n=-1)
读入缓冲区 buf。若提供 n,最多读 n 字节/字符。
参数
buf:目标缓冲区。n:读取长度,默认全部。
readline(size)
读取一行。若指定 size,最多读 size 个字符。行结束符为字符串 '\n' 或字节 b'\n'。
writable()
返回值:是否支持写入;为 False 时调用 write() 会抛出 OSError。
write(buf)
写入字符串或字节 buf。
返回值:写入的字符数或字节数。
示例
在 REPL 或比卜创造 Python 编辑器中:
with open('hello.py', 'w') as hello:
hello.write("print('Hello')")
import hello
# 输出: Hello
with open('hello.py') as hello:
print(hello.read())
import os
os.listdir() # ['hello.py']
os.remove('hello.py')
os.listdir() # []
计数器持久化示例:
import os
count = 0
if 'count.txt' in os.listdir():
with open('count.txt') as f:
count = int(f.read())
count += 1
with open('count.txt', 'w') as f:
f.write(str(count))
print(count)
每次重启 micro:bit 后计数会继续累加,直到重新刷写固件。