top of page

ALMACENAMIENTO, GESTIÓN DE ARCHIVOS EN MICRO:BIT

  • Joan A. Marí
  • 27 ene 2018
  • 6 Min. de lectura

A veces necesitamos guardar información útil. Dicha información se almacena como datos (en formato digital cuando se almacena en el ordenador). Si guardamos datos en el ordenador se mantiene incluso si apagamos y después volvemos a encendemos el dispositivo.

MicroPython para Micro:Bit permite realizar esto en un sistema de archivos sencillo. En la memoria existe aproximadamente 30k de memoria accesible en el sistema para este fin.

¿Qué es un sistema de archivos?

Significa almacenar y ordenar datos de una manera permanente, cualquier dato almacenado en un sistema de archivos sobrevive a reinicios del dispositivo. Como sugiere el nombre, los datos almacenados se organizan en archivos.

Un archivo informático también es llamado un recurso digita que es almacenado en un sistema de archivos. Como recurso contiene información útil con un formato de datos. Funciona exactamente cómo un archivo de papel. Es como un contenedor que tiene información útil. Normalmente ambos, papel y archivos digitales, son titulados para indicar que contienen. En informática es común acabar el nombre del archivo con un sufijo. Dicho sufijo indica en que tipo de archivo se encuentran codificados los datos. Por ejemplo “txt” indica un archivo de texto, “mp3” indica música codificado en MP3.

Algunos sistemas de archivos (como los que se encuentran en tu portátil) permiten organizar los archivos en directorios, son los nombrados contenedores que agrupan archivos y subdirectorios relacionados. Sin embargo, el sistema de archivos proporcionado por MicrPython es un sistema de archivos plano. Es decir, que no contiene directorios, simplemente todos los archivos son almacenados juntos en el mismo sitio.

El lenguaje de programación Python incluye una manera fácil y potente de trabajar con el sistema de archivos del ordenador. MicroPython en Micro:Bit implementa unas funciones sencillas para poder leer y escribir archivos en el dispositivo, al mismo tiempo también proporciona consistencia para poder trabajar con otras versiones de Python.

Nota. Los datos se almacenas en la memoria flash. Por lo tanto, flashear Micro:Bit incluye la destrucción de los datos que hayamos almacenado en el dispositivo. Sin embargo, si simplemente desconectamos el dispositivo los datos permanecerán almacenados hasta que los borremos o re-flasheemos el dispositivo.

Ábrete Sésamo

Leer y escribir un archivo en el sistema de archivos es gracias a la función “open”. Una vez que tenemos un archivo abierto nos permite realizar cambios hasta que lo cerremos (tal y como utilizaríamos un papel). Es esencial cerrar un archivo, ya que esto indica a MicroPython que hemos acabado de trabajar con el archivo.

La mejor manera para asegurarnos de esto es utilizar el estado “with” de la siguiente manera

with open('historia.txt') as mi_archivo:

contenido = mi_archivo.read()

print(contenido)

El estado “with” utiliza la función “open” para abrir un archivo y asignarlo a un objeto. En el anterior ejemplo, la función “open” abre el archivo llamado “historia.txt” (obviamente será un archivo de texto que contendrá una historia de algún tipo). El objeto que se utiliza para representar el archivo en código Python se llama “mi_archivo”. Posteriormente, en el código identado bajo del estado “with”, el objeto “mi_archivo” es utilizado para leer el contenido con el método “read()” y lo asignamos al objeto “contenido”.

Aquí es donde está el punto importante, la siguiente línea contiene el estado “print” que no está identado. El bloque de código asociado al estado “with” es el único que lee el archivo. Una vez que el bloque de código asociado al estado “with” ha terminado, Python (y MicroPython) cierra automáticamente el archivo. Esto se llama manejo del contenido y la función “open” crea objetos que son los manejadores de contenido de los archivos.

En pocas palabras, el alcance de la interacción con el archivo está definida en el bloque de código asociado con el estado “with” que abre el archivo.

¿Confundido?

No lo estés. Simplemente estamos diciendo que el código debe de parecerse al siguiente

with open (‘algun_archivo’) as algun_objeto:

# Hacer algo con algun_objeto en este bloque de código

# asociado con el estado with.

# Cuando el bloque ha finalizado entonces MicroPython

# automáticamente cierra el archivo y podemos continuar.

Es como un archivo de papel, un archivo digital es abierto por dos razones: para leer el contenido (como hemos visto en el ejemplo anterior) o para escribir algo en el archivo. El modo por defecto es leer un archivo. Si se quiere escribir en un archivo tendremos que utilizar la función “open” de la siguiente manera.

with open('hola.txt', 'w') as mi_archivo:

mi_archivo.write("Hola, Mundo!")

Date cuenta que el argumento “w” se utiliza para poner el objeto “mi_archivo” en modo de escritura. También podemos pasar el argumento “r” para activar el modo lectura, pero como es el modo por defecto podemos no ponerlo.

Escribir datos en un archivo se hace con el método “write” (tal y como te habrás dado cuenta) que coge el string que se quiere escribir como argumento. En el ejemplo anterior hemos escrito el texto “Hola, Mundo!” en un archivo llamado “hola.txt”.

Sencillo!

Nota. Cuando abres un archivo y escribes (varias veces estando el archivo en estado abierto) sobreescribiras el contenido que ya existía. Si se quiere añadir texto en un archivo primero hay que leerlo, almacenar el contenido en algún sitio, cerrarla, añadir el texto, abrir el archivo y escribirlo todo. Esto es con MicroPython, ya que en Python tenemos una función para añadir texto. No podemos añadir texto al Micro:Bit como en Python debido a la simple implementación del sistema de archivos.

SOS Sistema Operativo.

Así como podemos leer y escribir archivos, Python puede manipularlos también. Para ello necesitamos saber que archivos existen en el sistema de archivos y a veces incluso necesitamos borrarlos también.

En un ordenador normal, es una función del sistema operativo (como Windows, OSX o Linux) realizar estas tareas de Python. Dicha funcionalidad está disponible en Python a través del módulo llamado “os”. Puesto que MicroPython es el sistema operativo, hemos decidido mantener las funciones apropiadas en el módulo “os” para lograr consistencia, así que sabrás donde encontrarlas cuando usas Python “normal” en un dispositivo como un portátil o Raspberry pi.

Principalmente podrás realizar tres operaciones relacionadas con el sistema de archivos: listar los archivos, eliminar un archivo y averiguar el tamaño de un archivo.

Para listar los archivos en el sistema usamos la función “listdir”. Devuelve una lista de strings indicando los nombres de los archivos en el sistema de archivos. Veamos un ejemplo

import os

mis_archivos = os.listdir()

Para eliminar archivos utilizaremos la función “remove”. Utiliza un string como argumento que representa el nombre del archivo que queremos eliminar, como el siguiente código

import os

os.remove(‘nombre_archivo.txt’)

Finalmente, a veces es útil saber el tamaño de un archivo antes de leerlo. Para conseguir esto utilizamos la función “size”. Se utiliza del mismo modo que la función “remove”, utiliza un string como argumento que representa el nombre del archivo sobre el que queremos saber el tamaño. Devuelve un número entero que indica el número de bytes que ocupa el archivo.

import os

tamaño_archivo = os.size(‘un_gran_archivo.txt’)

Esta muy bien tener un sistema de archivos. Pero, ¿Qué pasa si queremos poner o quitar archivos de fuera del dispositivo?

Utilizaremos la herramienta “microfs” que veremos a continuación.

Transferencia de archivos

Si tenemos Python instalado en nuestro ordenador para programar nuestro BBC Micro:Bit entonces podemos utilizar una herramienta especial llamada “microfs” (abreviado como “ufs” cuando la utilizamos en la línea de comandos). Toda la documentación relativa al uso y a la instalación de microfs la podemos encontrar en este enlace.

(https://microfs.readthedocs.io/en/latest/)

Sin embargo es posible realizar la mayoría de las cosas que necesitemos simplemente con cuatro comandos básicos.

El sub – comando “ls” lista los archivos del sistema de archivos (Tiene el nombre del comando de Unix, ls, que sirve para la misma función).

$ ufs ls

story.txt

El sub – comando “get” coge un archivo del Micro:Bit conectado y lo guarda en la dirección actual en el ordenador (Se llama “get” como el comando que se utiliza en el protocolo de transferencia de archivos, FTP, que sirve para la misma función).

$ ufs get story.txt

El sub – comando “rm” elimina el nombre desde el sistema de archivos del Micro:Bit conectado (Tiene el nombre del comando de Unix, rm, que sirve para la misma función).

$ ufs rm story.txt

Finalmente, el sub – comando “put” pone un archivo desde el ordenador al dispositivo conectado (Se llama “put” como el comando que se utiliza en el protocolo de transferencia de archivos, FTP, que sirve para la misma función).

$ ufs put story2.txt

Principalmente principal.py

El sistema de archivos tiene una interesante propiedad, si acabas de flashear la ejecución de MicroPython en el dispositivo entonces cuando empiece simplemente está esperando para hacer algo. Sin embargo, si copias un archivo especial llamado “main.py” en el sistema de archivos, al reiniciar el dispositivo, MicroPython ejecutará el contenido del archivo “main.py”.

Además, si copias otros archivos Python en el sistema de archivos puedes “import” como cualquier otro módulo de Python. Por ejemplo, si tienes un archivo llamado “hello.py” que contiene el siguiente código.

def say_hello(name=”World”):

return “Hello, {}!”.format(name)

Tu puedes importar y utilizar la función “say_hello” de la siguiente manera

from microbit import display

from hello import say_hello

display.scroll(say_hello())

Por supuesto, como resultado vemos desplazarse el texto “Hello, World!” a través del display. El punto importante es que este ejemplo se divide en dos módulos Python y el estado “import” se utiliza para compartir código.

Nota. Si se ha flasheado un código en el dispositivo añadiendo ejecuciones en MicroPython, entonces MicroPython ignorará “main.py” y ejecutará el código. Para flashear sólo la ejecución de MicroPython simplemente asegúrate de que en el código tiene 0 caracteres. Una vez que lo has transferido podrás copiar el archivo “main.py”.

Fuente: https://microbit-micropython.readthedocs.io/en/latest/tutorials/storage.html

 
 
 

コメント


© 2016 by Joan A. Marí

  • LinkedIn Social Icon
  • FRAUDE
bottom of page