Temos um grande arquivo de dados brutos que gostaríamos de cortar para um tamanho especificado. Tenho experiência em .net c #, no entanto, gostaria de fazer isso em python para simplificar as coisas e por interesse.
Como eu iria obter as primeiras N linhas de um arquivo de texto em python? O sistema operacional em uso terá algum efeito na implementação?
Respostas:
Python 2
Python 3
Aqui está outra maneira (ambos Python 2 e 3)
fonte
fonte
f = open("file")
sem exceção, o tratamento para fechar o arquivo. A maneira Pythonic de manipular arquivos é com um gerenciador de contexto, ou seja, usando a instrução with. Isso é abordado no tutorial Python de saída de entrada ."It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way."
Se você deseja ler as primeiras linhas rapidamente e não se importa com o desempenho, pode usar
.readlines()
qual objeto da lista de devoluções e depois dividir a lista.Por exemplo, para as 5 primeiras linhas:
Uma vantagem em comparação com as outras respostas é a possibilidade de seleccionar facilmente a gama de linhas por exemplo, pular as primeiras 10 linhas
[10:30]
ou a dura 10[:-10]
ou tendo apenas linhas pares[::2]
.fonte
O que faço é chamar as N linhas usando
pandas
. Eu acho que o desempenho não é o melhor, mas por exemplo seN=1000
:fonte
nrows
opção, que pode ser definida como 1000 e o arquivo inteiro não é carregado. pandas.pydata.org/pandas-docs/stable/generated/… Em geral, o pandas possui essa e outras técnicas de economia de memória para arquivos grandes.sep
para definir um delimitador de coluna (que não deve ocorrer em um arquivo não-CSV)pandas.read()
função na documentação. Você conhece alguma informação sobre o assunto?Não existe um método específico para ler o número de linhas expostas pelo objeto de arquivo.
Eu acho que a maneira mais fácil seria seguir:
fonte
Com base na resposta votada pelo topo do gnibbler (20 de novembro de 2009 às 0:27): essa classe adiciona os métodos head () e tail () ao arquivo do objeto.
Uso:
fonte
As duas maneiras mais intuitivas de fazer isso seriam:
Iterar no arquivo linha por linha e linhas
break
posterioresN
.Iterar no arquivo linha por linha usando os tempos do
next()
métodoN
. (Essa é essencialmente apenas uma sintaxe diferente para o que a resposta principal faz.)Aqui está o código:
A conclusão é que, desde que você não use
readlines()
ouenumerate
insira o arquivo inteiro na memória, você terá muitas opções.fonte
maneira mais conveniente por conta própria:
Solução baseada na compreensão da lista A função open () suporta uma interface de iteração. O enumerate () abrange as tuplas open () e return (índice, item), depois verificamos se estamos dentro de um intervalo aceito (se i <LINE_COUNT) e, em seguida, simplesmente imprimimos o resultado.
Aproveite o Python. ;)
fonte
[next(file) for _ in range(LINE_COUNT)]
.Nas primeiras 5 linhas, basta:
fonte
Se você deseja algo que obviamente (sem procurar informações esotéricas nos manuais) funcione sem importações e tente / exceto e funcione em uma variedade razoável de versões do Python 2.x (2.2 a 2.6):
fonte
Se você tiver um arquivo muito grande e supondo que deseja que a saída seja uma matriz numpy, o uso de np.genfromtxt congelará o computador. Isso é muito melhor na minha experiência:
fonte
A partir do Python 2.6, você pode tirar proveito de funções mais sofisticadas no clase base de E / S. Portanto, a resposta mais bem avaliada acima pode ser reescrita como:
(Você não precisa se preocupar com o fato de seu arquivo ter menos de N linhas, pois nenhuma exceção StopIteration é lançada.)
fonte
lines
mas o argumento se referebytes
.Isso funcionou para mim
fonte
Isso funciona para Python 2 e 3:
fonte
fonte
Este método funcionou para mim
fonte