HOWTO · Python

Como ler linhas específicas a partir de um arquivo em Python

Tem métodos diferentes para ler linhas específicas do arquivo, por exemplo fileobject.readlines() para arquivos pequenos e linecache para arquivos repetidos e enumerate() para arquivos grandes.

Uma maneira comum de ler um arquivo em Python é lê-lo completamente e depois processar a linha específica. A leitura de um arquivo em Python é rápida, por exemplo, leva aproximadamente 0,67 segundos para escrever um arquivo de 100MiB. Mas se o tamanho do arquivo exceder 100 MB, isso causará problemas de memória quando for lido na memória.

Python tem 3 métodos embutidos para ler as linhas específicas de um arquivo, como introduzido nas próximas seções.

fileobject.readlines() para ler as linhas específicas de um arquivo de tamanho pequeno

fileobject.readlines() lê todo o conteúdo do arquivo para a memória. Poderia utilizar o corte da lista para ler as linhas específicas.

Se precisarmos apenas ler a linha 10,

with open("file.txt") as f:
    data = f.readlines()[10]
print(data)

Se precisarmos ler linhas de 10 a 100,

with open("file.txt") as f:
    data = f.readlines()[10:100]
print(data)

Loop for em fileobject para ler linhas específicas em Python

for line in fileobject é também uma solução rápida para arquivos pequenos.

lines = [10, 100]
data = []
i = 0

with open("file.txt", "r+") as f:
    for line in f:
        if i in lines:
            data.append(line.strip)

        i = i + 1

print(data)

Módulo linecache para ler as linhas específicas em Python

linecache para leitura de muitos arquivos, possível repetidamente ou extraindo muitas linhas:

import linecache

data = linecache.getline("file.txt", 10).strip()

O método de string strip() devolve uma string que retira espaços brancos de ambas as extremidades.

O módulo linecache permite obter qualquer linha de um arquivo fonte python enquanto utiliza o cache para otimizar internamente, o que é uma prática comum de leitura de muitas linhas de um único arquivo. O módulo de traceback o utiliza para recuperar as linhas de origem contidas no traceback formatado.

Enumerar durante a leitura de linhas específicas de um grande arquivo em Python

Ao ler arquivos, um arquivo grande pode causar problemas como o de não caber na memória. Neste caso, podemos utilizar ʻenumerate():

with open("file.txt") as f:
    for i, line in enumerate(f):
        pass  # process line i

Note que para a linha n-th, i = n-1.

A função ʻenumerate() é utilizada para combinar um objeto de dados transponível (como uma lista, tuple ou string) em uma seqüência de índices, listando dados e subscritos de dados ao mesmo tempo, que é geralmente utilizada no loop for.