Ej. 17 : Haciendo más ficheros (y cometiendo errores)…

Ahora voy a hacer un par de cosas más con ficheros. Voy a escribir un programa Python para copiar un fichero a otro. Será muy corto, aunque me dará una idea de lo que puedo llegar a hacer con ficheros…

Ej. 17 - Código con errores

Qué bonito, ¿verdad? Pues estoy atascadísima. Soy humana. Ya iba yo muy confiada. Hay 1 error fatal y no consigo verlooo…

He ido corrigiendo algunos y eran detalles tontos que en 2 segundos cambiaba al ejecutar, guardaba el código cambiado (ésto es una totería supina, pero hay que estar a todo, y se me ha pasado alguna que otra vez, dándome el mismo error a pesar del cambio, HAY QUE GUARDAR en el editor por cada nuevo cambio).

He aquí mi cadena de errores (casi todos tontunas), que he ido solventado con dignidad hasta llegar al punto muerto en el que me encuentro.

Ej.17 - Errores en cadenaPor lo que leo el error ya me ha pasado antes y no está en el programa, sino a la hora de ejecutar…

¿No debería escribir algo así como … phython  ex17.py  test.txt ?

En realidad quiero escribir test17.txt para no borrar el test del ejercicio, pero eso es ménos importante…

…..

Le voy a dar una vuelta y luego retomo…

😦

SOLUCIÓN

Bien. Me han echado un cable. Pero lo justo para tener que seguir peleando, un poco más, ¿eh?.

Thanks!!!

Al igual que con otros programas, debería ejecutar con dos parámetros o argumentos: el fichero desde el que copiar y el fichero al que copiar. Estaba aquí la cuestión. Creo que leyendo ésto bien, se entiende, necesito 2 archivos txt, no sólo uno.

Lo he hecho en dos pasos:

  1. Había que mostrar el contenido del fichero de «María y su corderito». 🙂 Ese que hice en el ejercicio anterior…el test.txt desde el que copiar. Lo ejecuto en Poweshell con el comando type.. muestra el contenido del fichero…
  2. Y una vez hecho eso, entonces lo ejecuto junto con un new_file que es al que voy a copiar.

That´s all!!

Bueno, había algún detallito en el código solucionados sobre la marcha. Lo importante creo que es ir entendiendo lo que hago, dentro de lo posible.

Insisto en que volveré sobre mis pasos después para completar comentarios y demás. De momento quiero ir avanzando con ritmo.

Éste es el PROGRAMA CORRECTO.

Ej. 17 - Código solucionado

Sigo haciendo intentos de ejecución… Ej.17 - Errores en cadena...y SOLUCIÓN BISLO IMPORTANTE, LO QUE HAY QUE EJECUTAR, DONDE HE DUDADO… Ej.17 - SOLUCIÓN GRANDE

+PREGUNTAS

P: ¿Qué hace el comando(método) exists que he importado?

R: Devuelve True si existe el fichero cuyo nombre en formato string pasamos por parámetro. Devuelve False si no existe.

P: ¿Qué hace import?

R: Es una forma de obtener código libre que han escrito otros programadores, así no tienes que volver a escribirlo.

P: ¿Qué hace type en la línea de comandos?

R: Muestra el contenido de un fichero

P: ¿Qué hace la función len()?

R: Calcula el tamaño o longitud de la cadena pasada por parámetro y lo devuelve como un número.

P: ¿Qué significa el error «Syntax: EOL while scanning string literal.»?

R: Que olvidé poner correctamente el final de una cadena con comillas.

+EJ PARA AMPLIAR…

Para amliar me proponen que haga un programa que pase 4 ficheros como arg, mezclarlos, y generaruna mezcla de los tres primeros.

Ej. Python merge.py  f1 f2 f3 f4

donde f4 = f1 + f2 + F3

Y con ésto y un bizcocho…voy a por el 18…

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.