Isso lerá o arquivo inteiro na memória de uma só vez; portanto, só é prático se você estiver lendo um arquivo bastante pequeno.
Hayden Schiff
1
Para generalizar a tarefa de ler várias linhas de cabeçalho e melhorar a legibilidade, eu usaria a extração de método. Suponha que você queira tokenizar as três primeiras linhas coordinates.txtpara usar como informações de cabeçalho.
Exemplo
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
A extração do método permite especificar o que você deseja fazer com as informações do cabeçalho (neste exemplo, simplesmente tokenizamos as linhas do cabeçalho com base na vírgula e a retornamos como uma lista, mas há espaço para fazer muito mais).
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
Se coordinates.txtcontiver outro cabeçalho, basta alterar numberheaderlines. O melhor de tudo, é claro o que __readheader(rh, numberheaderlines=2)está fazendo e evitamos a ambiguidade de ter que descobrir ou comentar por que o autor da resposta aceita usa next()em seu 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)
usof.readline()
e armazená-lo como uma variávelheader_line = next(f)
.fonte
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
demore-itertools
como indicado na docs.python.org/3/library/itertools.html#itertools-recipes ? Eu ouvi sobre isso em stackoverflow.com/questions/11113803Se você deseja a primeira linha e deseja executar alguma operação no arquivo, este código será útil.
fonte
Se o fatiamento pudesse funcionar em iteradores ...
fonte
fonte
Para generalizar a tarefa de ler várias linhas de cabeçalho e melhorar a legibilidade, eu usaria a extração de método. Suponha que você queira tokenizar as três primeiras linhas
coordinates.txt
para usar como informações de cabeçalho.Exemplo
A extração do método permite especificar o que você deseja fazer com as informações do cabeçalho (neste exemplo, simplesmente tokenizamos as linhas do cabeçalho com base na vírgula e a retornamos como uma lista, mas há espaço para fazer muito mais).
Resultado
Se
coordinates.txt
contiver outro cabeçalho, basta alterarnumberheaderlines
. O melhor de tudo, é claro o que__readheader(rh, numberheaderlines=2)
está fazendo e evitamos a ambiguidade de ter que descobrir ou comentar por que o autor da resposta aceita usanext()
em seu código.fonte
Se você deseja ler vários arquivos CSV a partir da linha 2, isso funciona como um encanto
(isso faz parte da resposta da Parfait a uma pergunta diferente)
fonte
fonte