Aunque fue nombrado después de valores separados por comas, el módulo CSV puede manejar archivos analizados sin importar el delimitador de campo – ya sea pestañas, barras verticales, o cualquier otra cosa. Además, este módulo proporciona dos clases para leer y escribir datos en los diccionarios de Python ( DictReader y DictWriter , respectivamente). En esta guía nos centraremos exclusivamente en el primero.
Para ilustrarlo, utilizaremos una lista de partidos de la NBA a partir de noviembre de 2018 en los que el visitante ganó el partido.
Primero importaremos el módulo CSV :
1import csv
pitón
A continuación, abriremos el archivo en modo de sólo lectura, instanciaremos un objeto lector de CSV y lo usaremos para leer una fila a la vez:
1234withopen($0027nba_games_november2018_visitor_wins.txt$0027, newline =$0027$0027)as games: game_reader = csv.reader(games, delimiter=$0027t$0027)for game in game_reader:print(game)
pitón
La figura 2 muestra que cada fila fue leída en una lista después de que se ejecutara el conjunto anterior:
Aunque esto sin duda se ve mucho mejor que nuestra versión anterior donde las pestañas y nuevas líneas se mezclaban con el contenido real, todavía hay espacio para mejorar.
La clase DictReader
Un objeto DictReader CSV se comporta esencialmente como un lector regular pero mapea cada fila a un diccionario ordenado a partir de Python 3.6. En versiones anteriores, cada fila se mapea a un diccionario ordinario. En cualquier caso, esto nos permite manipular un diccionario en Python utilizando los métodos y herramientas que hemos tratado en las dos últimas guías (Manipulación de listas y diccionarios en Python, Importación de datos desde archivos de Microsoft Excel con Python).
Para empezar, crearemos una lista vacía donde guardaremos cada juego como un diccionario separado:
1 games_list =[]
pitón
Finalmente, repetiremos el mismo código de arriba con un pequeño cambio. En lugar de imprimir cada fila, la añadiremos a games_list . Si utilizas Python 3.5 o superior, puedes omitir dict() y utilizar games_list.append(game) en su lugar. En Python 3.6 y posteriores, esta función se utiliza para convertir el diccionario ordenado en uno regular para una mejor legibilidad y una manipulación más fácil.
1234withopen($0027nba_games_november2018_visitor_wins.txt$0027, newline =$0027$0027)as games: game_reader = csv.DictReader(games, delimiter=$0027t$0027)for game in game_reader: games_list.append(dict(game))
pitón
Podemos ir un paso más allá y usar la comprensión de la lista para devolver sólo aquellos juegos en los que la puntuación de los visitantes fue superior a 130. La siguiente declaración crea una nueva lista llamada visitor_big_score_games y la llena con cada juego dentro de games_list donde la condición es verdadera:
1 visitor_big_score_games =[juego por juego en la lista de juegos ifint(game[$0027Puntuación de los visitantes$0027]);130]
pitón
Ahora que tenemos una lista de diccionarios, podemos escribirla en una hoja de cálculo como se explica en Importar datos de archivos de Microsoft Excel con Python o manipularla de otra manera. Otra opción consiste en escribir la lista convertida en cadena en un archivo de texto plano llamado visitor_big_score_games.json para su distribución en formato JSON:
12withopen($0027visitante_grande_puntuación_juegos.json$0027,$0027w$0027)as games: games.write(str(visitante_gran_puntuación_juegos))
pitón
Si sólo quiere ver la lista, no convertirla en una hoja de cálculo o un archivo JSON, puede usar pprint() para mostrarla en un formato fácil de usar como se muestra en la Fig. 3:
12import pprint as pp pp.pprint(visitor_big_score_games)
pitón
Como puedes ver, las posibilidades son infinitas y el único límite es nuestra imaginación.