本地持久化文件系统

以持久的方式存储数据非常有用,即使设备重新启动,数据也能保持完好。 在传统的计算机上,这通常通过由保存原始数据的命名文件和包含文件的命名目录组成的文件系统来实现。 Python支持使用这些文件系统所需的各种操作。

但是,由于micro:bit是在硬件和存储容量方面都有限的设备,因此MicroPython提供了在设备上保存数据所需的一小部分功能。 由于内存限制, 文件系统上大约有30k可用存储空间

警告

重刷设备(Re-flash)将会破坏你的数据。

由于文件系统存储在micro:bit的闪存中,并且刷新设备会重写所有可用闪存,所以如果刷新设备,所有数据都将丢失。

但是,如果您关闭设备,数据将保持不变,直到您将其删除(参考下文)或重刷设备。

Micro:bit上的MicroPython提供了一个平面文件系统; 即没有目录层次的概念,只是一个命名文件的列表。读取和写入文件是通过标准的Python open 函数和类型为 TextIOBytesIO 的结果文件类对象(表示文件)来实现的。处理文件系统上文件的操作(例如,列出或删除文件)包含在 os 模块中。

如果一个文件以文件扩展名 .py 结尾,则可以被导入。例如,一个名为 hello.py 的文件可以像这样被导入: import hello

MicroPython REPL中的示例会话可能如下所示:

>>> with open('hello.py', 'w') as hello:
...    hello.write("print('Hello')")
...
>>> import hello
Hello
>>> with open('hello.py') as hello:
...   print(hello.read())
...
print('Hello')
>>> import os
>>> os.listdir()
['hello.py']
>>> os.remove('hello.py')
>>> os.listdir()
[]
open(filename, mode='r')

返回一个表示参数 filename 中指定文件的文件对象。此模式默认为 'r',表示以文本模式读取文件。另一种通用模式 'w' 表示写文件(如果文件已经存在,则覆盖该文件的内容)。其他两种模式可以与上面描述的模式结合使用: 't' 表示文本模式(用于读取和写入字符串), 'b' 表示二进制模式(用于读取和写入字节)。 如果这些都没有被指定,则假定为 't' 模式(文本模式)。在文本模式下,文件对象将成为 TextIO 的一个实例。 在二进制模式下,文件对象将成为 BytesIO 的一个实例。 例如,调用 'rb' 以二进制模式读取文件。

class TextIO
class BytesIO

这些类的实例代表micro:bit的平面文件系统中的文件。TextIO类用于表示文本文件。BytesIO类用于表示二进制文件。 除了TextIO以字符串工作而BytesIO以字节工作外,它们的工作方式完全相同。

这些类不是直接被实例化。相反,类的适当配置实例由上述的 open 函数返回。

close()

刷新并关闭文件。如果文件已经关闭,此方法不生效。一旦文件被关闭,任何对文件(例如阅读和写入)的操作都会引发异常。

name()

返回对象表示的文件的名称。这将与传递给实例化对象的 open 函数的 filename 参数相同。

read(size)

以单个字符串或 size 字节的方式,从文件中读取和返回最大的 size 字符。为方便起见,如果 size 未给定或为-1,则返回文件中的所有数据。如果文件中剩余可读的数据少于指定 size 的字符串或字节,则可能返回少于指定 size 的字符或字节。

如果返回0个字符或字节,并且 size 不为0,则表示文件结束。

如果 size 大于可用RAM,则会发生 MemoryError 异常。

readinto(buf, n=-1)

将字符或字节读入缓冲区 buf。 如果提供了 n ,则将 n 个字节或字符读入缓冲区 buf

readline(size)

从文件中读取并返回行。如果给定 size ,则读取最大的 size 字符。行终止符对于字符串总是 '\n' ,对于字节总是 b'\n'

writable()

若文件支持写入,则返回 True ,若返回 Falsewrite() 将会引发 OSError

write(buf)

将字符串或字节 buf 写入文件并返回写入的字符或字节数。