sábado, 23 de octubre de 2010

Python manejo de archivos

Laboratorio

El manejo de archivos era una de las cosas que menos me gustaba a la hora de programar, ya que no entendía bien la manera de trabajarlos, no sabía cuando se estaba leyendo una línea o alguna palabra e ignoraba completamente cuando se tiene que abrir un archivo de lectura, escritura o lectura y escritura.
Antes del proyecto de medio curso(sabía que lo íbamos a utilizar demasiado), estuve practicando con algunos códigos, aunque después mejore parte de ellos, esto es con lo que empecé:

Primero que nada es importante saber que al querer manejar ficheros se debe de tener claro para que se quiere utilizar, para leer datos, escribir en el archivo, leer y escribir, agregar datos, porque hay distintas formas de abrirlo de acuerdo al objetivo "w" abre el archivo para escritura si ya existía un archivo con ese nombre sobreescribe, "r" abre un archivo que tiene que existir para lectura, "a" abre un archivo para lectura y escritura si se quiere escribir los datos se agregan al final del archivo y si no existe el archivo lo crea.

La manera de abrir el fichero es:

f.open("archivo.txt", "a")
f.read() #se imprimen el contenido del archivo
f.write("Holis") #agregamos la palabra Holis
f.close()

Ahora los ejemplos de los que había hablado:

Primero cree una lista en un archivo.txt al que llame lista.txt que es con el que voy a estar trabajando:

Sandra Cecilia,1413021,77,
Gemma Tovanche,1458523,85
RGB,1456984,95,
Jose Miguel,1456325,100,

como vemos tengo varias "categorías" que son nombre, matricula y calificación, en Python es posible separar llamar a cada dato por su categoría usando la función
linea = line.split(','), en la que indico que cada categoría esta separada por comas, el siguiente paso es darlo nombre a las categorías yo lo hice de la siguiente forma:

nombre = linea[0]
matricula = linea[1]
calif = linea[2]

así es como digo que la primer columna es el nombre, la segunda la matricula y la tercera la calificación.
Ya en el código en python al que llame leerlista.py trabaje con estas variables(nombre, matricula, calificación) buscando el nombre de alguien en el archivo, e imprime su calificación:


Este es el resultado en el terminal:



Ahora para eliminar alguna línea del archivo lo que se hace es leer linea por linea y buscar en cada una que no coincida con la linea que se quiere eliminar, y si es así se guarda todo en la variable contenido(que declare previamente como una cadena vacía) y cuando se encuentra la coincidencia la linea no entra al if y no se guarda en contenido es así como se elimina la linea ahora el ultimo paso es sobreescribir en el archivo la variable contenido y la linea se habrá eliminado.

Este es el código:

Y la lista sin la línea indicada:

Y el código para modificar un archivo no es más que la combinación de agregar al archivo y eliminar, este es el código:


Y la ejecución(ahora podemos ver que cambio "Jose Miguel" por "miki"):


Bueno creo que eso es suficiente para tener los conocimientos básicos del manejo de listas, si tienen alguna duda por favor comenten :D

13 comentarios:

  1. Hola, oye Cecy, tengo una duda al estar probando los códigos no se como es que se cambie, borre la primer persona. Solo me funciono con los siguientes, pero la primera no. ¿A que se debe eso?

    ResponderEliminar
  2. Exelente lo que buscabaa muchas graciass te lo agredesco !!! Saludoos!

    ResponderEliminar
  3. ¡Enhorabuena!. Circulan muchos comentarios por la red que aseguran que no se puede modificar un archivo de texto desde Python de manera directa. Todos dicen que se debe crear un archivo paralelo con los cambios que se quieran introducir, etc, etc... Usted, sin embargo, lo consigue de una manera sencilla y elegante. ¡Bravo!
    Bien, después del peloteo (es broma) una consulta:¿Como puedo conseguir que Python me devuelva los mismos datos, independientemente de mayúsculas, minúsculas y acentos? Es decir, que me devuelva lo mismo si escribo 'Fernando' o 'fernando'. Si escribo 'Garcia', sin acento, o 'García' con acento.
    Me llamo Fernando Garcia. Mi correo es riello57@gmail.com. Gracias

    ResponderEliminar
  4. Buen aporte
    Yo estoy empezando programar en python y estoy haciendo un buscador dandole parametros desde el shell que busque un archivo entre al archivo y me muestre si esta el contenido indicado y me de la ruta pero si la palabra no esta de primera no recorre la cadena de texto hasta ahora llevo esto
    import os
    import sys
    print "El directorio actual es:", os.path.curdir
    print " (y su ruta absoluta es):", os.path.abspath(os.path.curdir)
    print ""
    print "El script actual es:", __file__
    print " (y su ruta es):", os.path.abspath(__file__), "\n"

    if(len(sys.argv) > 2):
    if sys.argv[1]:
    print "Abriendo " + sys.argv[1]
    archivo = sys.argv[1]
    palabra = sys.argv[2]
    repetidas = 0
    f = open(sys.argv[1])
    lines = f.readlines()
    for line in lines:
    palabras = line.split(' ')
    for p in palabras:
    if p == palabra:
    repetidas = repetidas + 1
    print "la palabra \"{0}\" se repite {1} veces en el Archivo {2}".format(palabra,repetidas,archivo)
    else:
    print "Debes indicar el nombre del archivo"
    si me puede echar una mano te lo agradeceria

    ResponderEliminar
  5. ¡Hola! No se por qué me sale el siguiente error
    File "C:/Users/Cibeles/Desktop/prueba.py", line 6, in
    matricula=linea[1]
    IndexError: list index out of range

    ¿Me podéis ayudar?

    ResponderEliminar
    Respuestas
    1. CREO! y solo creo que es porque hay una linea en blanco en el archivo

      Eliminar
  6. como realizo que me pida 2 numeros por teclado para q se sume, y el resultado se guarde en un texto.txt ????

    ResponderEliminar
    Respuestas
    1. Quizá estas explicaciones te puedan ayudar:
      http://www.mclibre.org/consultar/python/lecciones/python_entrada_salida.html

      Eliminar
  7. Como se puede eliminar una linea de codigo cuando el archivo es muy grande, se puede de esa forma? Acaso no ocupa demasiada memoria?

    ResponderEliminar
  8. Como se puede eliminar una linea de codigo cuando el archivo es muy grande, se puede de esa forma? Acaso no ocupa demasiada memoria?

    ResponderEliminar
  9. Muy buen post, me sirvio de mucho para una tarea...
    Muchas Gracias!

    ResponderEliminar