Como ler um arquivo linha por linha para uma lista em Python

  1. readlines para ler o arquivo linha por linha em Python
  2. Iterar sobre o método de arquivo para ler um arquivo linha por linha em Python
  3. Método file.read para ler o arquivo linha por linha em Python
  4. 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.

Artigo relacionado - Python String

  • Como remover espaços em branco numa string em Python