ローカル永続ファイルシステム¶
データの永続的な保存は、デバイスの再起動の間に変更されないようにしておくと便利です。従来のコンピュータでは、生データを保持する名前付きファイルとファイルを含む名前付きディレクトリで構成されるファイルシステムによって実現されているものが多いです。Python は、そのようなファイルシステムで作業するために必要なさまざまな操作をサポートしています。
ただし、micro:bit はハードウェアとストレージの両方の容量で制限されたデバイスなので、MicroPython はデバイス上のデータを保持するために必要な機能の小さなサブセットを提供します。メモリの制約のため、ファイルシステムの 記憶域は約 30 KB となっています
警告
デバイスを再フラッシュするとデータが破棄されます。
ファイルシステムは micro:bit のフラッシュメモリに保存されているため、デバイスをフラッシュするとフラッシュメモリがすべて書き換えられるため、すべてのデータが失われます。
ただし、デバイスの電源を切っただけではデータはそのまま残り続けます。データが消えるのは、ファイルを削除するか(後述)、デバイスを再フラッシュした場合です。
micro:bit の MicroPython は、フラットファイルシステムを提供します。すなわち、ディレクトリ階層の概念がなく、ファイルシステムは名前付きファイルのリストにすぎません。ファイルの読み書きは、標準 Python と同様の open タイプの関数と、この関数が返す(ファイルを表す) ファイルシステム上のファイルを操作する操作(ファイルの一覧表示や削除など)は 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』 で、テキストモードでの読み込みを意味します。もう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
の文字列またはバイト列をファイルに書き込み、書き込んだ文字数またはバイト数を返します。
-