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

Jinku Hu 10 outubro 2023
  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
Como ler um arquivo linha por linha para uma lista 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.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - Python String