Storage(存储)

Microbit的数据存储大约30K。文件系统是指存储在文件中的数据即使设备重启仍旧可用,就像实际文件夹中的文件一样,可以随时调用。

电脑文件是已命名的存储在文件系统里的数据资源,这些资源包括有用的数据信息。也就是被装入了有用信息的容器。在生活中,我们使用纸张和数字文件命名文件夹,在电脑里常用的命名的方式是加后缀.something(.xxx)。.something(.xxx)是指文件格式。比如说.txt指文本文件,.jpg指JPEG格式的图片。

在Micropython上的文件系统为平面文件系统,即无子文件夹,所有文件都存储于同一个位置。

注意:

** 重新烧写固件会丢失你存储的所有内容,因为他会重写flash存储器,而你的文件系统是存储在你的flash上的。**

打开文件

读取和编写存储在文件系统中的文件需要调用函数open()。因为任何文件的编写过程都是:打开->读取/编写->关闭。在关闭文件时,Micropython会知道你的操作已经完成。

以下是关键字with的用法示例:

with open('story.txt') as my_file:
  content = my_file.read()
print(content)

关键字with使用函数open打开文件并指定该文件为一个对象。如上例所示,函数open打开名称为story.txt的文件。该对象在Python中的表示名称及形式为my_file

在代码块关键字with下方,对象my_file被用来read()读取文件并将内容赋予对象content

重要的一点,下一行包含关键字print未缩进。代码块与关键字with结合只是读取文件。当代码块与关键字with结合并关闭了,则Python(和Micropython)能够帮你自动关闭文件。

和纸质文件一样,数字文件的打开要实现读取内容或者改写。默认模式是读取,如果需要编写你需要按以下方式使用open

with open('hello.txt', 'w') as my_file:
  my_file.write("Hello, World!")

注意:'w'是用来设置对象my_file为写模式。你也可以通过'r'将文件对象设置为读模式。

注意: 当你打开并编写文件(比如在文件打开状态下的多次编写),你需要在已存在的文件内容的结尾进行编写。

在Micropytho中,如果你想在文件中添加内容,首先你需要读取文件,存储内容然后关闭,将添加内容添加后再打开,再在已更改的内容中编写。Python则可以打开读写添加部分。在Microbit中并不能直接打开并编写添加内容,原因是文件系统的简单实现。

文件操作

一旦你想要删除文件,你必须知道文件系统中有哪些文件。在Python中的os模块可以实现读写文件。由于Micropython是一个操作系统,出于一致性的考虑,最终将合适的功能函数存储于os模块中。同Python操作设备一样,这些功能存放的位置与电脑和树莓派一样。

你也可以在文件系统中实现3种操作:

排列文件;

import os
my_files = os.listdir()

移动文件;

import os
os.remove('filename.txt')

查看文件大小:

import os
file_size = os.size('a_big_file.txt')

文件转换器

如果你已经在电脑上安装了Python来操作Microbit,你会用到程序microfs(在命令行缩写为ufs)。

你可以使用简单的4行命令实现大部分的功能。

$ ufs ls
story.txt

ls副命令将系统文件列表(命名在总Unix命令后,充当相同的功能)。

$ ufs get story.txt

get在连接的Micro:bit板子上获取文件并存储至电脑当前位置。

$ ufsrm story.txt

rm将已命名的对象从文件系统移动至Micro:bit板子。

$ ufs put story2.txt

最后,Put将文件从电脑传至已连接的设备。

Mainly main.py

文件系统有一个有趣的性质:如果刚在Micropython的运转时间进行设备的FLASH,在开始时,Micropython会等待。但是当你在文件系统中复制程序main.py,再重启设备,Micropython会运行main.py的内容。

如果你复制其他的Python文件,你可以import任意的Python模块。比如说,有个hello.py:

def say_hello(name="World"):
  return "Hello, {}!".format(name)

你可以按以下方式操作:

from microbit import display
from hello import say_hello

display.scroll(say_hello())

最后效果是‘Hello,World!’的滚屏播放。重点是该例子将2个分离的Python模块用关键字import相连接,实现信息共享。

注意:

当你在Micropython运行条件下,已将FLASH脚本至设备,Micropython会忽略main.py并运行已嵌入的脚本。

运行Micropython进行FLASH时,需要保证在编辑器中已写的脚本为0字节,那么FLASH后你将可以复制得到main.py。