Así como el corte de control nos sirve para generar un reporte, el apareo nos sirve para asociar/relacionar datos que se encuentran en distintos archivos.
La idea básica es: a partir de dos archivos (uno principal y otro relacionado) que tienen alguna información que los enlace, generar un tercero (o una salida por pantalla), como una mezcla de los dos.
Para hacer esto es conveniente que ambos archivos estén ordenados por el valor que los relaciona.
Ejemplo
Por ejemplo, si se tiene un archivo con un listado de alumnos (padrón, apellido, nombre, carrera), y otro archivo que contiene las notas de esos alumnos (padrón, materia, nota), y se quieren listar todas las notas que corresponden a cada uno de los alumnos, se lo puede hacer de la siguiente manera.
# notas.py: Recorre un archivo de alumnos y otro de notas e imprime
# las notas que corresponden a cada alumno
#!/usr/bin/env python
# encoding: latin1
import csv
def leer_datos(datos):
""" Obtiene el siguiente registro, o devuelve None si llegó al fin
del archivo. """
try:
return datos.next()
except:
return None
def imprimir_notas_alumnos(alumnos, notas):
""" Abre los archivos de alumnos y notas, y por cada alumno imprime
todas las notas que le corresponden."""
notas_a = open(notas)
alumnos_a = open(alumnos)
notas_csv = csv.reader(notas_a)
alumnos_csv = csv.reader(alumnos_a)
# Saltea los encabezados
leer_datos(notas_csv)
leer_datos(alumnos_csv)
# Empieza a leer
alumno = leer_datos(alumnos_csv)
nota = leer_datos(notas_csv)
while (alumno):
print alumno[2]+", "+alumno[1]+" - "+alumno[0]
if (not nota or nota[0] != alumno[0]):
print "\tNo se registran notas"
while (nota and nota[0] == alumno[0]):
print "\t"+nota[1]+": "+nota[2]
nota = leer_datos(notas_csv)
alumno = leer_datos(alumnos_csv)
# Cierro los archivos
notas_a.close()
alumnos_a.close()
imprimir_notas_alumnos("alumnos.csv", "notas.csv")
En el ejemplo anterior usamos apareo de datos para combinar y mostrar información, de forma similar se puede utilizar para agregar información nueva, borrar información o modificar datos de la tabla principal. Gran parte de las bases de datos relacionales basan su funcionamiento en estas funcionalidades.