Esto leerá todo el archivo en la memoria a la vez, por lo que solo es práctico si está leyendo un archivo bastante pequeño.
Hayden Schiff
1
Para generalizar la tarea de leer varias líneas de encabezado y mejorar la legibilidad, usaría el método de extracción. Supongamos que desea tokenizar las tres primeras líneas decoordinates.txt para usar como información de encabezado.
Ejemplo
coordinates.txt
---------------Name,Longitude,Latitude,Elevation,CommentsString,DecimalDeg.,DecimalDeg.,Meters,StringEuler's Town,7.58857,47.559537,0, "Blah"
Faneuil Hall,-71.054773,42.360217,0
Yellowstone National Park,-110.588455,44.427963,0
Luego, la extracción del método le permite especificar qué desea hacer con la información del encabezado (en este ejemplo simplemente tokenizamos las líneas del encabezado en función de la coma y la devolvemos como una lista, pero hay espacio para hacer mucho más).
def __readheader(filehandle, numberheaderlines=1):"""Reads the specified number of lines and returns the comma-delimited
strings on each line as a list"""for _ in range(numberheaderlines):yield map(str.strip, filehandle.readline().strip().split(','))with open('coordinates.txt','r')as rh:# Single header line#print next(__readheader(rh))# Multiple header linesfor headerline in __readheader(rh, numberheaderlines=2):print headerline # Or do other stuff with headerline tokens
Si coordinates.txtcontiene otro encabezado, simplemente cambie numberheaderlines. Lo mejor de todo es que está claro lo que __readheader(rh, numberheaderlines=2)está haciendo y evitamos la ambigüedad de tener que averiguar o comentar por qué el autor de la respuesta aceptada utiliza next()en su código.
# Open a connection to the filewith open('world_dev_ind.csv')as file:# Skip the column names
file.readline()# Initialize an empty dictionary: counts_dict
counts_dict ={}# Process only the first 1000 rowsfor j in range(0,1000):# Split the current line into a list: line
line = file.readline().split(',')# Get the value for the first column: first_col
first_col = line[0]# If the column value is in the dict, increment its valueif first_col in counts_dict.keys():
counts_dict[first_col]+=1# Else, add to the dict and set value to 1else:
counts_dict[first_col]=1# Print the resulting dictionaryprint(counts_dict)
next(f)
usarlof.readline()
y almacenarlo como una variableheader_line = next(f)
.fuente
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
demore-itertools
como se indica en docs.python.org/3/library/itertools.html#itertools-recipes ? Escuché sobre esto en stackoverflow.com/questions/11113803Si desea la primera línea y luego desea realizar alguna operación en el archivo, este código será útil.
fuente
Si el corte podría funcionar en iteradores ...
fuente
fuente
Para generalizar la tarea de leer varias líneas de encabezado y mejorar la legibilidad, usaría el método de extracción. Supongamos que desea tokenizar las tres primeras líneas de
coordinates.txt
para usar como información de encabezado.Ejemplo
Luego, la extracción del método le permite especificar qué desea hacer con la información del encabezado (en este ejemplo simplemente tokenizamos las líneas del encabezado en función de la coma y la devolvemos como una lista, pero hay espacio para hacer mucho más).
Salida
Si
coordinates.txt
contiene otro encabezado, simplemente cambienumberheaderlines
. Lo mejor de todo es que está claro lo que__readheader(rh, numberheaderlines=2)
está haciendo y evitamos la ambigüedad de tener que averiguar o comentar por qué el autor de la respuesta aceptada utilizanext()
en su código.fuente
Si desea leer varios archivos CSV a partir de la línea 2, esto funciona de maravilla
(Esto es parte de la respuesta de Parfait a una pregunta diferente)
fuente
fuente