ローカル永続ファイルシステム

データの永続的な保存は、デバイスの再起動の間に変更されないようにしておくと便利です。従来のコンピュータでは、生データを保持する名前付きファイルとファイルを含む名前付きディレクトリで構成されるファイルシステムによって実現されているものが多いです。Python は、そのようなファイルシステムで作業するために必要なさまざまな操作をサポートしています。

ただし、micro:bit はハードウェアとストレージの両方の容量で制限されたデバイスなので、MicroPython はデバイス上のデータを保持するために必要な機能の小さなサブセットを提供します。メモリの制約のため、ファイルシステムの 記憶域は約 30 KB となっています

警告

デバイスを再フラッシュするとデータが破棄されます。

ファイルシステムは micro:bit のフラッシュメモリに保存されているため、デバイスをフラッシュするとフラッシュメモリがすべて書き換えられるため、すべてのデータが失われます。

ただし、デバイスの電源を切っただけではデータはそのまま残り続けます。データが消えるのは、ファイルを削除するか(後述)、デバイスを再フラッシュした場合です。

micro:bit の MicroPython は、フラットファイルシステムを提供します。すなわち、ディレクトリ階層の概念がなく、ファイルシステムは名前付きファイルのリストにすぎません。ファイルの読み書きは、標準 Python と同様の open タイプの関数と、この関数が返す TextIO または BytesIO 型のファイル形式オブジェクト(ファイルを表す)によって実現されます。ファイルシステム上のファイルを操作する操作(ファイルの一覧表示や削除など)は os モジュール内にあります。

ファイル拡張子 .py のついたファイルがある場合は、それをインポートできます。たとえば、ファイル名 hello.pyimport 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' で、テキストモードでの読み込みを意味します。もう1つの共通モードは 'w' で、書き込み用です(すでに存在する場合はファイルの内容を上書きします)。上で説明したものと組み合わせて使用​​できる他の2つのモードは、 '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 が指定された場合は、バッファ buf に指定のバイト数または文字数を読み込みます。

readline(size)

ファイルから1行を読み込んで返します。size を指定すると、最大 size 文字が読み込まれます。

行終端は常に文字列では '\n' 、バイト列では b'\n' です。

writable()

書き込みをサポートしていれば True を返しますこれが False の場合に write() を行うと OSError が発生します。

write(buf)

バッファ buf の文字列またはバイト列をファイルに書き込み、書き込んだ文字数またはバイト数を返します。