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。