🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Domine Arquivos em Python! Um Guia Completo de E/S Básica a Técnicas Avançadas

Para executar Python no prompt de comando ou PowerShell no seu PC, é necessário baixar e instalar o Python.
Se ainda não o fez, consulte o artigo Instalação do Python e configuração do ambiente de desenvolvimento para instalar o Python.

Ao programar, você inevitavelmente encontrará situações em que deseja salvar os resultados do seu programa em um arquivo ou ler dados de um arquivo de texto externo. Com o Python, essas operações de arquivo são surpreendentemente fáceis. Este artigo oferece um guia completo para criadores da web sobre os fundamentos da leitura e escrita de arquivos (E/S), desde o básico até exemplos avançados, com código que você pode copiar e colar para ver funcionar!

Ao final deste artigo, você será capaz de manipular arquivos em Python com confiança. Vamos mergulhar e fazer funcionar! 🚀


Primeiros Passos nas Operações com Arquivos: A Função `open()` e a Declaração `with`

Para manipular arquivos em Python, você começa usando a função embutida `open()` para acessar o arquivo de destino. Um conceito crucial a ser lembrado é a declaração `with`. Usar uma declaração `with` garante que o arquivo seja fechado automaticamente após a conclusão, evitando que você se esqueça de fechá-lo. Isso é considerado uma prática padrão do Python, então vamos aprendê-los juntos.

A função `open()` precisa principalmente de duas informações:

Os três modos mais básicos são:

Além disso, ao lidar com caracteres multibyte como em português (acentos, ç), é uma prática comum especificar `encoding='utf-8'` para evitar texto corrompido. Agora, vamos ver em ação!


Lendo Arquivos: Inserindo Dados no Python

Primeiro, vamos ver como ler o conteúdo de um arquivo de texto. Vamos supor que você tenha um arquivo chamado `sample.txt` com o seguinte conteúdo no mesmo diretório do seu script Python.

Olá, Python!
Este é um arquivo de texto de exemplo.
Vamos aprender operações de arquivo.

read(): Ler o Arquivo Inteiro de Uma Vez

O método `read()` busca todo o conteúdo de um arquivo e o retorna como uma única string grande. É ideal para arquivos pequenos.

<!-- Código Python -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print('Erro: sample.txt não encontrado.')

<!-- Saída Esperada -->
# Olá, Python!
# Este é um arquivo de texto de exemplo.
# Vamos aprender operações de arquivo.

readlines(): Ler Linha por Linha para uma Lista

O método `readlines()` retorna uma lista onde cada linha é um elemento. Note que cada linha incluirá o caractere de nova linha (\n) no final.

<!-- Código Python -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines)
except FileNotFoundError:
    print('Erro: sample.txt não encontrado.')

<!-- Saída Esperada -->
# ['Olá, Python!\n', 'Este é um arquivo de texto de exemplo.\n', 'Vamos aprender operações de arquivo.\n']

Loop `for`: Ler Arquivos Grandes com Eficiência

Se um arquivo for muito grande, lê-lo todo para a memória de uma vez com `read()` ou `readlines()` é ineficiente. Nesses casos, a melhor prática é processar o arquivo linha por linha usando um loop `for`. Este é o método mais eficiente em termos de memória.

<!-- Código Python -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        for line in f:
            # print() adiciona sua própria nova linha, então removemos a original
            print(line.strip())
except FileNotFoundError:
    print('Erro: sample.txt não encontrado.')

<!-- Saída Esperada -->
# Olá, Python!
# Este é um arquivo de texto de exemplo.
# Vamos aprender operações de arquivo.

Escrevendo em Arquivos: Salvando Dados do Python

A seguir, vamos ver como escrever dados gerados no Python em um arquivo. Preste atenção à diferença entre os modos 'w' (escrita) e 'a' (acréscimo).

write(): Escrever em um Novo Arquivo (Modo de Escrita)

Quando você abre um arquivo no modo 'w', um novo arquivo é criado se ele não existir. Se ele existir, seu conteúdo é completamente apagado. Você usa o método write() para escrever strings.

Nota: write() não adiciona uma nova linha automaticamente. Se você quiser uma nova linha, deve adicionar o caractere de nova linha \n você mesmo no final da string.

<!-- Código Python -->
# Lista de conteúdo para escrever
lines_to_write = [
    'Este é um novo arquivo.\n',
    'Estamos escrevendo com o método write().\n',
    'Novas linhas requerem \\n.\n'
]

with open('output.txt', 'w', encoding='utf-8') as f:
    for line in lines_to_write:
        f.write(line)

print('Escrita em output.txt concluída com sucesso.')

# Após executar este código, um arquivo chamado 'output.txt' será criado
# com o seguinte conteúdo:
# 
# Este é um novo arquivo.
# Estamos escrevendo com o método write().
# Novas linhas requerem \n.

write(): Adicionar a um Arquivo Existente (Modo de Acréscimo)

Usar o modo 'a' permite adicionar novos dados ao final de um arquivo existente sem apagar seu conteúdo atual. Isso é útil para coisas como arquivos de log, onde você deseja acumular dados.

<!-- Código Python -->
# Adicionar ao arquivo 'output.txt' que acabamos de criar
with open('output.txt', 'a', encoding='utf-8') as f:
    f.write('Esta é uma linha adicionada.\n')

print('Adição ao output.txt concluída com sucesso.')

# Após executar este código, o conteúdo de 'output.txt' será:
# 
# Este é um novo arquivo.
# Estamos escrevendo com o método write().
# Novas linhas requerem \n.
# Esta é uma linha adicionada.

Exemplo Avançado: Gerando um Arquivo HTML com Python

Vamos aplicar o que aprendemos a um exemplo relevante para criadores da web. Aqui está um script de exemplo que gera dinamicamente um arquivo HTML. Criaremos um cartão de perfil simples em HTML com base em dados de um dicionário.

A execução do código Python a seguir irá gerar um arquivo chamado `profile.html`. Este é um 'exemplo de HTML completo e executável'.

Passo 1: O Código Python para Gerar HTML

Salve este código com um nome como `generate_html.py` e execute-o.

<!-- Código Python: generate_html.py -->
# Dados do perfil
profile_data = {
    'name': 'João Silva',
    'job': 'Desenvolvedor Web',
    'skills': ['HTML', 'CSS', 'JavaScript', 'Python'],
    'message': 'Com Python, você pode gerar HTML dinamicamente assim!'
}

# Gerar HTML para a lista de habilidades
skill_list_html = ''
for skill in profile_data['skills']:
    skill_list_html += f'          <li>{skill}</li>\n'

# O template HTML completo
html_template = f"""
<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Perfil Gerado</title>
    <style>
        body {{
            font-family: sans-serif;
            background-color: #121212;
            color: #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }}
        .card {{
            background-color: #1e1e1e;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            padding: 2rem;
            width: 350px;
            border: 1px solid #5f6368;
        }}
        h1 {{
            color: #669df6;
            text-align: center;
        }}
        h2 {{
            color: #8ab4f8;
            border-bottom: 1px solid #5f6368;
            padding-bottom: 0.5rem;
        }}
        ul {{
            list-style: none;
            padding: 0;
        }}
        li {{
            background-color: #333;
            border-radius: 5px;
            padding: 0.5rem 1rem;
            margin-bottom: 0.5rem;
        }}
        p {{
            line-height: 1.6;
        }}
    </style>
</head>
<body>
    <div class="card">
        <h1>{profile_data['name']}</h1>
        <p>{profile_data['job']}</p>

        <h2>Habilidades</h2>
        <ul>
{skill_list_html}
        </ul>

        <h2>Mensagem</h2>
        <p>{profile_data['message']}</p>
    </div>
</body>
</html>
"""

# Escrever no arquivo
file_path = 'profile.html'
with open(file_path, 'w', encoding='utf-8') as f:
    f.write(html_template)

print(f"'{file_path}' foi gerado. Abra-o no seu navegador para verificar.")

Passo 2: O Arquivo HTML Gerado (`profile.html`)

Quando você executa o código Python acima, ele criará um arquivo `profile.html` com o seguinte conteúdo. Tente abrir este arquivo em um navegador da web. Você deve ver um belo cartão de perfil compatível com o modo escuro.

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Perfil Gerado</title>
    <style>
        body {
            font-family: sans-serif;
            background-color: #121212;
            color: #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .card {
            background-color: #1e1e1e;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            padding: 2rem;
            width: 350px;
            border: 1px solid #5f6368;
        }
        h1 {
            color: #669df6;
            text-align: center;
        }
        h2 {
            color: #8ab4f8;
            border-bottom: 1px solid #5f6368;
            padding-bottom: 0.5rem;
        }
        ul {
            list-style: none;
            padding: 0;
        }
        li {
            background-color: #333;
            border-radius: 5px;
            padding: 0.5rem 1rem;
            margin-bottom: 0.5rem;
        }
        p {
            line-height: 1.6;
        }
    </style>
</head>
<body>
    <div class="card">
        <h1>João Silva</h1>
        <p>Desenvolvedor Web</p>

        <h2>Habilidades</h2>
        <ul>
          <li>HTML</li>
          <li>CSS</li>
          <li>JavaScript</li>
          <li>Python</li>

        </ul>

        <h2>Mensagem</h2>
        <p>Com Python, você pode gerar HTML dinamicamente assim!</p>
    </div>
</body>
</html>

Pontos a Observar e Melhores Práticas

As operações de arquivo são poderosas, mas há algumas coisas com as quais se deve ter cuidado.


Resumo e Próximos Passos

Neste artigo, cobrimos o básico de leitura e escrita de arquivos em Python. Dominar a sintaxe with open() tornará a persistência de dados e a integração com dados externos muito mais fácil.

  • A forma básica de abrir um arquivo é with open('nome_do_arquivo', 'modo', encoding='utf-8') as f:
  • Para leitura, escolha entre read(), readlines() e um loop for com base em suas necessidades.
  • Para escrita, use write() e distinga entre 'w' (sobrescrever) e 'a' (acrescentar).
  • Ao lidar com texto não-ASCII, encoding='utf-8' é essencial!

Quando estiver confortável com as operações de arquivo, a próxima coisa a aprender é o tratamento de erros. Saber como lidar com situações como um arquivo não encontrado é essencial para construir programas estáveis. Incentivamos você a aprender sobre isso em nosso próximo artigo.

Dominando o Tratamento de Exceções em Python (try-except)