operaciones leer importar exportar diccionario datos crear con columnas archivos archivo python csv namedtuple

importar - leer columnas en python



¿Cuál es la forma pitónica de leer los datos de archivo CSV como filas de namedtuples? (2)

Por favor, eche un vistazo a csv.DictReader . Básicamente, proporciona la capacidad de obtener los nombres de las columnas de la primera fila como lo está buscando 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 a 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]

¿Cuál es la mejor manera de tomar un archivo de datos que contiene una fila de encabezado y leer esta fila en una tupla nombrada para que se pueda acceder a las filas de datos por el nombre del encabezado?

Estaba intentando algo así:

import csv from collections import namedtuple with open(''data_file.txt'', mode="r") as infile: reader = csv.reader(infile) Data = namedtuple("Data", ", ".join(i for i in reader[0])) next(reader) for row in reader: data = Data(*row)

El objeto lector no es subscripble, por lo que el código anterior arroja un TypeError . ¿Cuál es la forma pitónica de leer un encabezado de archivo en una ruta de acceso nombrada?


Utilizar:

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...