Como ler um arquivo linha por linha para uma lista em Python
-
readlines
para ler o arquivo linha por linha em Python - Iterar sobre o método de arquivo para ler um arquivo linha por linha em Python
-
Método
file.read
para ler o arquivo linha por linha em Python - Comparação de diferentes métodos na leitura de um arquivo linha por linha em Python
Suponha que temos um arquivo com o conteúdo abaixo,
Line One: 1
Line Two: 2
Line Three: 3
Line Four: 4
Line Five: 5
Precisamos ler o conteúdo do arquivo linha por linha para uma lista, ["Line One: 1", "Line Two: 2", "Line Three: 3", "Line Four: 4", "Line Five: 5"]
.
Vamos introduzir diferentes métodos para ler um arquivo linha a linha para uma lista abaixo.
readlines
para ler o arquivo linha por linha em Python
readlines
retorna uma lista de linhas do fluxo.
>>> filePath = r"/your/file/path"
>>> with open(filePath, 'r', encoding='utf-8') as f:
f.readlines()
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']
O caractere final \n
também está incluído na string e poderia ser removido com str.rstrip('\n')
.
>>> with open(filePath, 'r', encoding='utf-8') as f:
[_.rstrip('\n') for _ in f.readlines()]
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
Iterar sobre o método de arquivo para ler um arquivo linha por linha em Python
Nós poderíamos iterar sobre o arquivo para lê-lo linha por linha, ao invés de utilizar readlines
.
>>> with open(filePath, 'r', encoding='utf-8') as f:
[_.rstrip('\n') for _ in f]
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
Este método é muito melhor do que o método acima da perspectiva de utilização da memória. O método readlines
guarda todas as linhas do arquivo na memória, mas o método de interação leva apenas uma linha do conteúdo do arquivo para a memória e o processa. É preferível se o tamanho do arquivo for super grande para evitar o MemoryError
.
Método file.read
para ler o arquivo linha por linha em Python
O file.read(size=-1, /)
lê do arquivo até o EOF se o size
não estiver definido. Nós poderíamos dividir as linhas a partir dele utilizando a função str.splitlines
.
>>> with open(filePath, 'r') as f:
f.read().splitlines()
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
O resultado não inclui o caractere final \n
no método padrão str.splitlines
. Mas você poderia incluir \n
se o parâmetro keepends
estiver definido para ser True
.
>>> with open(filePath, 'r') as f:
f.read().splitlines(keepends=True)
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']
Comparação de diferentes métodos na leitura de um arquivo linha por linha em Python
Iremos comparar o desempenho da eficiência entre os diferentes métodos introduzidos neste artigo. Aumentamos o número de linhas no arquivo testado para 8000
para comparar facilmente a diferença de desempenho.
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
f.readlines()''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
16.36330720000001
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
[_ for _ in f]''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
18.37279060000003
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
f.read().splitlines()''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
12.122660100000019
O método readlines()
é ligeiramente melhor que o método de iteração de arquivos, e file.read().splitlines()
é o método mais eficiente com margem de mais de 25% comparado com os outros dois métodos.
Mas, se na aplicação BigData
onde a memória é o constrangedor, o método de iteração de arquivos é o melhor, como explicado acima.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook