Mestre em Python: Manipulando Arquivos com Eficiência

Em qualquer contexto de programação, a manipulação de arquivos é crucial. Em Python, essa capacidade é robusta, permitindo operações como leitura, escrita e muito mais, com flexibilidade e segurança.

Ao concluir este guia, você estará apto a:

  • Abrir e extrair dados de arquivos em Python.
  • Processar linhas específicas dentro de um arquivo de texto.
  • Adicionar ou sobreescrever conteúdo em arquivos.
  • Empregar gerenciadores de contexto para uma gestão eficiente de arquivos.

Como Realizar a Leitura de Arquivos em Python

Para iniciar a leitura, utilize a função `open()` com a seguinte estrutura: `open(‘nome_do_arquivo’, ‘modo’)`.

  • O argumento `nome_do_arquivo` indica o arquivo a ser acessado.

Importante: Se o arquivo estiver no mesmo diretório do seu script, basta informar o nome. Caso contrário, especifique o caminho completo para o arquivo.

  • O parâmetro `modo` define a forma de acesso ao arquivo.

O modo padrão para abertura é o de leitura, representado por `’r’`. Contudo, explicitar o modo é uma prática recomendada.

Antes de avançarmos, vamos examinar o conteúdo do arquivo `lib.txt`, que servirá de base para nossos exemplos.

📁 O arquivo de texto e o código usado neste tutorial podem ser baixados deste repositório no GitHub.

O código a seguir demonstra como abrir e ler o conteúdo do arquivo ‘lib.txt’ utilizando a função `open()`:

arquivo = open('lib.txt', 'r')
conteudo = arquivo.read()
print(conteudo)
arquivo.close()

# Resultado
Olá, mundo!
Aqui estão algumas bibliotecas Python úteis:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Neste exemplo:

  • A função `open()` cria um objeto do tipo arquivo, que nomeamos `arquivo`.
  • Em seguida, usamos o método `read()` para ler todo o conteúdo do arquivo.
  • O conteúdo é então armazenado na variável `conteudo` e exibido na tela.
  • Finalmente, fechamos o arquivo utilizando `arquivo.close()`.

A negligência no fechamento de arquivos pode levar ao esgotamento de recursos, especialmente ao lidar com um grande número deles. O não fechamento de arquivos pode causar consumo excessivo de memória.

Para otimizar essa operação, vamos empregar gerenciadores de contexto. O exemplo abaixo ilustra como utilizá-los:

with open('lib.txt', 'r') as f:
    conteudo = f.read()
    print(conteudo)

Ao empregar gerenciadores de contexto, a função `close()` torna-se desnecessária, pois o arquivo é automaticamente fechado após a conclusão das operações de leitura/escrita.

Como Extrair Linhas de um Arquivo em Python

No arquivo de exemplo, o número de linhas é pequeno. No entanto, em cenários com arquivos maiores, ler todo o conteúdo de uma vez pode não ser a abordagem mais eficiente.

Em arquivos extensos, essa estratégia pode levar a problemas de memória. Uma alternativa é ler as linhas do arquivo individualmente, como mostraremos a seguir.

Utilizando o Método `readline()`

O método `readline()` permite ler uma linha do arquivo por vez.

Veja o seguinte exemplo:

with open('lib.txt', 'r') as f:
    linha = f.readline()
    print(linha)
    linha = f.readline()
    print(linha)

# Resultado
Olá, mundo!

Aqui estão algumas bibliotecas Python úteis:

Como pode ser observado, cada chamada do método `readline()` lê e exibe uma linha do arquivo.

O cursor do arquivo avança para o início da próxima linha após cada chamada de `readline()`.

Os métodos `tell()` e `seek()` permitem verificar e manipular a posição do cursor do arquivo, respectivamente.

O código abaixo demonstra o uso de `f.seek(0)` para resetar o cursor para o início do arquivo. Assim, a primeira linha será impressa duas vezes.

with open('lib.txt', 'r') as f:
    linha = f.readline()
    print(linha)
    f.seek(0)
    linha = f.readline()
    print(linha)

# Resultado
Olá, mundo!

Olá, mundo!

Utilizando o Método `readlines()`

O método `readlines()` retorna uma lista contendo todas as linhas do arquivo.

Observe o seguinte código:

with open('lib.txt', 'r') as f:
    linhas = f.readlines()
    print(linhas)

# Resultado
['Olá, mundo!\n', 'Aqui estão algumas bibliotecas Python úteis:\n', '1) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']

Utilizando o Loop `for` para Ler Linhas

Um loop `for` pode ser usado para iterar sobre as linhas de um arquivo.

Ao obter o objeto de arquivo, o loop `for` permite percorrer o conteúdo do arquivo linha por linha, como demonstrado abaixo:

with open('lib.txt', 'r') as f:
    for linha in f:
        print(linha, end='')

A função `print()` adiciona uma quebra de linha por padrão. Para evitar duplicatas, definimos `end=”` para manter a formatação original do arquivo.

Como Ler Partes do Conteúdo de um Arquivo em Python

Python permite a leitura de arquivos em partes menores.

Observe o código abaixo:

  • Definimos o `chunk_size` como 50. Isso fará com que os primeiros 50 caracteres sejam lidos e exibidos.
  • Ao usar o método `tell()`, verificamos a posição do cursor do arquivo.
chunk_size = 50
with open('lib.txt', 'r') as f:
    chunk = f.read(chunk_size)
    print(chunk)
    current = f.tell()
    print(f"Posição atual do cursor: {current}")

# Resultado
Olá, mundo!
Aqui estão algumas bibliotecas Python út
Posição atual do cursor: 51

Essa abordagem pode ser utilizada para ler um arquivo inteiro em blocos, como no exemplo a seguir:

chunk_size = 50
with open('lib.txt', 'r') as f:
    chunk = f.read(chunk_size)
    print(chunk, end='')

    while len(chunk) > 0:
        chunk = f.read(chunk_size)
        print(chunk, end='')

# Resultado
Olá, mundo!
Aqui estão algumas bibliotecas Python úteis:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Utilizamos um loop `while` para ler o conteúdo do arquivo em blocos de 50 caracteres até o fim.

Como Escrever em um Arquivo em Python

Para escrever em um arquivo de texto, é necessário abri-lo no modo de escrita (`’w’`).

O seguinte código ilustra como isso é feito:

with open('novo_arquivo.txt', 'w') as f:
    f.write('Olá, Python!')

Isso criará um arquivo chamado `novo_arquivo.txt` no diretório atual.

Se executarmos o mesmo código novamente, o conteúdo anterior será substituído.

Execute o comando `cat novo_arquivo.txt` no terminal:

cat novo_arquivo.txt
# Resultado: Olá, Python!

Isso acontece porque o modo de escrita (`’w’`) sobrescreve o conteúdo existente. Para adicionar dados ao arquivo sem apagar o conteúdo anterior, utilize o modo de anexação.

Como Anexar Conteúdo a um Arquivo em Python

Para adicionar conteúdo a um arquivo sem sobrescrevê-lo, utilize o modo de anexação (`’a’`).

O código a seguir, quando executado duas vezes, adiciona a string ao arquivo:

with open('novo_arquivo.txt', 'a') as f:
    f.write('Olá, Python!')

Dessa forma, o conteúdo é adicionado ao final do arquivo:

cat novo_arquivo.txt
# Resultado: Olá, Python!Olá, Python!

Conclusão

Revisamos as principais operações com arquivos:

  • Leitura, escrita e anexação de dados.
  • Uso de `seek()` para mover o cursor do arquivo.
  • Uso de `tell()` para obter a posição atual do cursor.

Este guia visa oferecer uma base sólida para manipulação de arquivos em Python. Além de arquivos de texto, você pode explorar o trabalho com arquivos JSON.

Relacionado:

Como verificar o comprimento de uma lista em Python em 3 passos.