1. 文档中心
  2. 比卜创造 Micro:bit
  3. API 参考
  4. 本地持久化文件系统

本地持久化文件系统

在设备重启后仍保留数据,常需持久化存储。传统计算机用命名文件与目录组织数据;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 后计数会继续累加,直到重新刷写固件。