Saltar al contenido

¿Cuál es la forma pitónica de leer datos de archivos CSV como filas de tuplas con nombre?

Solución:

Usar:

Data = namedtuple("Data", next(reader))

y omite la línea:

next(reader)

Combinando esto con una versión iterativa basada en el comentario de martineau a continuación, el ejemplo se convierte en Python 2

import csv
from collections import namedtuple
from itertools import imap

with open("data_file.txt", mode="rb") as infile:
    reader = csv.reader(infile)
    Data = namedtuple("Data", next(reader))  # get names from column headers
    for data in imap(Data._make, reader):
        print data.foo
        # ...further processing of a line...

y para Python 3

import csv
from collections import namedtuple

with open("data_file.txt", newline="") as infile:
    reader = csv.reader(infile)
    Data = namedtuple("Data", next(reader))  # get names from column headers
    for data in map(Data._make, reader):
        print(data.foo)
        # ...further processing of a line...

Por favor eche un vistazo a csv.DictReader. Básicamente, brinda la capacidad de obtener los nombres de las columnas de la primera fila mientras los busca y, después de eso, le permite acceder a cada columna en una fila por nombre usando un diccionario.

Si por alguna razón aún necesita acceder a las filas como collections.namedtuple, debería ser fácil transformar los diccionarios en tuplas con nombre de la siguiente manera:

with open('data_file.txt') as infile:
    reader = csv.DictReader(infile)
    Data = collections.namedtuple('Data', reader.fieldnames)
    tuples = [Data(**row) for row in reader]
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *