4   Manejo de información

Hace años al Departamento de Informática se le llamaba de Procesamiento Electrónico de Datos (Electronic Data Processing en Inglés, con las siglas EDP). El nombre antiguo era más descriptivo de la labor que se supone debían realizar las computadoras. Aquí mostraremos cómo hacemos esto en Python, con un conjunto de datos pequeño pero real.

Tenemos la siguiente información en el archivo capitales.txt:

México,D.F. 
Aguascalientes,Aguascalientes 
Tijuana,Baja California 
Mexicali,Baja California Sur 
Campeche,Campeche 
Tuxtla Gutiérrez,Chiapas 
Chihuahua,Chihuahua 
Saltillo,Coahuila 
Colima,Colima 
Durango,Durango 
Toluca,Edo. de México 
Chilpancingo,Guerrero 
Guanajuato,Guanajuato 
Pachuca,Hidalgo 
Guadalajara,Jalisco 
Morelia,Michoacán 
Cuernavaca,Morelos 
Tepic,Nayarit 
Monterrey,Nuevo León 
Oaxaca,Oaxaca 
Puebla,Puebla 
Querétaro,Querétaro 
Chetumal,Quintana Roo 
Culiacán,Sinaloa 
Hermosillo,Sonora 
San Luis Potosí,San Luis Potosí 
Villa Hermosa,Tabasco 
Tampico,Tamaulipas 
Tlaxcala,Tlaxcala 
Jalapa,Veracruz 
Mérida,Yucatán 
Zacatecas,Zacatecas

Son los nombres de los Estados mexicanos con su ciudad capital. Primero la capital, seguida de una coma y el nombre del Estado.

A continuación vamos a leer esta pequeña 'base de datos' a una cadena en Python, la vamos a convertir a una lista de registros, luego separaremos los campos de cada registro. El lector puede ir haciendo primero estos pasos en forma interactiva, revisando los resultados:

# Leemos el archivo a una cadena: 
 
f = open( 'capitales.txt' ) 
datos = f.read() 
 
# Partimos la cadena a una lista cuyos elementos son 
# los registros de nuestra 'base de datos' 
 
import string 
lista = string.split( datos, '\n' ) 
print lista 
 
# Convertimos cada elemento de la lista a una pareja, 
# usamos una función lambda: 
 
pares = map( lambda e: string.split( e, ','), lista ) 
 
print pares 
 
# Podemos crear una lista para cada campo: 
# una lista de capitales y otra lista de estados. 
# Esta es una forma de obtenerlas: 
 
capitales = [] 
estados = [] 
for capital,estado in pares: 
    capitales.append( capital ) 
    estados.append( estado ) 
 
# Cómo determinar los nombres únicos de ambas listas? 
# Usamos la concatenación de listas. 
 
unicos = [] 
for nombre in capitales+estados: 
    if nombre not in unicos: 
        unicos.append(nombre) 
    else: 
        print nombre 
 
# Cuántos elementos tenemos? 
 
print len(unicos) 
 
# Los ordenamos alfabéticamente: 
 
unicos.sort() 
print unicos

Para concluir, definimos una función que lee el archivo de este ejemplo, separa en campos y registros, y nos regresa una matriz en forma de una lista:

def leedatos( nombrearchivo ): 
    "Abre un archivo, lee y regresa un arreglo." 
    f = open( nombrearchivo ) 
    renglones = f.readlines() 
    arreglo = map( lambda x: x.split(','), renglones ) 
    return arreglo 
 
matriz = leedatos( 'capitales.txt' ) 
 
for renglon in matriz: 
    for celda in renglon: 
        print '%-20s' % celda, 
    print

generaci-n-de-documentos-html [0]5   Generación de documentos HTMLgeneraci-n-de-documentos-html