Algoritmos de Programación con Python

11.2. Ejemplo de procesamiento de archivos

Por ejemplo, para mostrar todas las líneas de un archivo, precedidas por el número de línea, podemos hacerlo como en el Código 11.1.

# Código 11.1: numera_líneas.py**: Imprime las líneas de un archivo con su número

archivo = open("archivo.txt")
i = 1
for linea in archivo:
    linea = linea.rstrip("\\n")
    print " %4d: %s" % (i, linea)
    i+=1
archivo.close()

La llamada a rstrip es necesaria ya que cada línea que se lee del archivo contiene un fin de línea y con la llamada a rstrip("\\n") se remueve.

Nota Los archivos de texto son sencillos de manejar, pero existen por lo menos tres formas distintas de marcar un fin de línea. En Unix tradicionalmente se usa el caracter \n (valor de ASCII 10, definido como nueva línea) para el fin de línea, mientras que en Macintosh el fin de línea se solía representar como un \r (valor ASCII 13, definido como retorno de carro) y en Windows se usan ambos caracteres \r\n.

Si bien esto es algo que hay que tener en cuenta en una diversidad de casos, en particular en Python por omisión se maneja cualquier tipo de fin de línea como si fuese un \n, salvo que se le pida lo contrario. Para manejar los caracteres de fin de línea a mano se puede poner una U en el parámetro modo que le pasamos a open.

Otra opción para hacer exactamente lo mismo seria utilizar la función de Python `enumerate(secuencia). Esta función devuelve un contador por cada uno de los elementos que se recorren, puede usarse con cualquier tipo de secuencia, incluyendo archivos. La versión equivalente se muestra en el Código 11.2.

# Código 11.2: numera_líneas2.py: Imprime las líneas de un archivo con su número

archivo = open("archivo.txt")
for i, línea in enumerate(archivo):
    línea = línea.rstrip("\\n")
    print " %4d: %s" % (i, línea)
archivo.close()

Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano, Nicolás Paez. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.