Ej. 16 : Leyendo y escribiendo ficheros…

En el ejercicio anterior vi todos los métodos (comandos/funciones) para trabajar con ficheros. Ésta es una tabla de métodos importantes…

MÉTODO ¿QUÉ HACE? ABREV
Close Cierra el achivo.
Read Lee el contenido del fichero. Puede asignar el resultado a una variable. r
Readline Lee sólo una línea del fichero de texto.
Truncate Vacía el fichero. ¡¡Cuidado!!
Write (cosas) Escribe cosas en el fichero. Requiere como parámetro la cadena a escribir en el fichero. w
Append Añade a

Voy a usarlos para crear un sencillo editor de texto: Ej. 16 Editor Más adelante volveré sobre ésto. Y ejecuto el programa: Ej. 16 Terminal con notas Y ahora viene lo mejor: En la carpeta mystuff «aparece» (como por arte de magia) el fichero que acabo de crear… Ej. 16 Archivo creado ALGUNAS PREGUNTAS

P: ¿Qué significa «w»?

R: Sólo es una cadena con un carácter que se utiliza para indicar el modo de apertura del fichero. Si usa «w», está diciendo «abrir éste fichero en modo escritura (write), de ahí el carácter «w». Ver la tabla del principio: «r» para leer (read), «a» para añadir (append) …

P: ¿Cuáles son los modificadores de los modos apertura de ficheros que podemos usar?

R: El más importante es el modificador +, así puedo escribir ‘w+’, ‘r+’, y ‘a+’. Ésto abrirá el fichero en ambos modos, lectura y escritura, y dependiendo del carácter usado, en una u otra posición del fichero.

P: Escribiendo simplemente open(filename), ¿el fichero lo abre en modo ‘r‘(lectura)?

R: Si. Éste es el modo por defecto de la función open().

P:¿Por qué tengo que pasar ‘w’ como un parámetro extra a open?

R: Es más seguro indicar explícitamente a open que quiero escribir un fichero…pero…mmmm…dudo

P: ¿Es necesario trucate() con el parámetro ‘w’?

R: Ir al EJ.5…

+PRÁCTICAS

  1. Escribir un código similar al último ejercicio que use read y argv para leer el archivo que he creado.
  2. En vez de hacer tantas repeticiones, podría usar cadenas con formato y secuencias de escape para mostrar line1, line2 y line3 con sólo un comando target.write() en lugar de seis.

Ej. 10 : Repasando…

En el Ej. 9 vi algunas cosas nuevas como dos formas para hacer una cadena en varias líneas. En la primera forma escribí el carácter \n  (barra invertida y n) entre el nombre de los meses. Lo que estos dos caracteres hacen es un salto de línea en el lugar de la cadena de caracteres donde están.

Hay muchas secuencias de escape. Hago un ejercicio y lo explico.

Ej10 Editor

Aquí se observa cómo el uso de triple comillas «»» que encapsula el texto en rojo de arriba, permite poner tantas líneas de textos como se quiera, ya que hace que funcione como una cadena de caracteres o string.

Ej10 Terminal

SECUENCIAS de ESCAPE

Ésta es la lista de todas las secuencias de escape que soporta Python.

Secuencia de Escape En pantalla… O lo que es lo mismo…
\\ \ Una única barra invertida
\’ Escape de comilla simple en una cadena
\” Escape de comilla doble en una cadena
\a BELL ASCII bell
\b BS ASCII retroceso
\f FF ASCII avance de página
\n LF ASCII linefeed o salto de línea
\N{name} Sólo Unicode Carácter name en la base de datos Unicode
\r CR ASCII retorno de carro
\t TAB ASCII tabulación horizontal
\uxxxx Sólo Unicode Carácter con 16-bits hexadecimal y valor xxxx
\Uxxxxxxxx Sólo Unicode Carácter con 32-bits hexadecimal y valor xxxxxxxx
\v \v ASCII tabulación vertical (VT)
\ooo oo Carácter con valor octal
\xhh hh Carácter con valor hexadecimal

Poco a poco iré haciendo ejemplos de todo y volveré sobre ésta tabla.

P: Relacionado con la práctica 3. ¿Qué significa «combinar» escapes y formatos?

R: Cada uno de éstos ejercicios se puede combinar con otros para resolver problemas. Partiendo de lo que sabes sobre cadenas con formato, puedes escribir un código nuevo que use las cadenas y, además, use las secuencias de escape que hemos visto en éste ejercicio.

P: Cuando uso %r ninguna secuencia de escape funciona.

R: El formato %r muestra en bruto los datos que escribí, lo que incluye las secuencias de escape tal cual. Use en su lugar %s. Recuerda siempre que %r es para depurar y %s para mostrar en pantalla.

P: Cuando esscribo // o / no funciona.

R: Ésto se debe a que usas la barra / en lugar de la barra invertida \. Son caracteres diferentes y hacen cosas diferentes.