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

【Copie e Cole para Funcionar】Vamos Criar um App Web para Ler e Exibir Dados CSV com Python!

Leitura obrigatória para iniciantes em programação! Este artigo explica, da forma mais detalhada possível, como criar uma aplicação web simples que lê um arquivo CSV usando Python e exibe seu conteúdo em uma tabela no navegador. Não é necessário conhecimento especializado. Apenas copie e cole o código fornecido, e você terá um aplicativo funcionando em seu computador. Experimente a emoção de ver "Funcionou!" por si mesmo.


Introdução: Apenas alguns meses atrás, eu estava na mesma situação que você

Olá! Eu sou o autor deste artigo e, há apenas alguns meses, eu era um completo iniciante que não sabia nada sobre programação. Eu ficava frustrado com cada erro e quase desisti várias vezes, pensando: "Talvez isso não seja para mim...".

Mas, por tentativa e erro e com a IA (Inteligência Artificial) como minha parceira, comecei a entender o código gradualmente. Antes que eu percebesse, em um mês e meio, eu havia lançado dois sites por conta própria (buyonjapan.com, copicode.com).

Este artigo é exatamente o que eu gostaria de ter lido naquela época. Escrevi-o da perspectiva de um iniciante, compartilhando os obstáculos que enfrentei e como os superei. Evitarei jargões técnicos o máximo possível e, quando os usar, explicarei de forma simples para que você possa acompanhar com confiança.


PASSO 1: Vamos Preparar o Desenvolvimento do App (Configuração do Ambiente)

Primeiro, vamos nos preparar para criar o aplicativo. Pense nisso como o passo de "reunir ingredientes e utensílios" na cozinha. Não é difícil, então vamos ver um passo de cada vez.

1. Preparando Python e Flask

Este aplicativo é construído usando uma linguagem de programação chamada Python e uma ferramenta chamada Flask (que, em termos técnicos, é um "framework web").

O Flask é como uma caixa mágica que torna a criação de aplicativos web com Python incrivelmente fácil. Primeiro, vamos instalar o Flask no seu computador.

Abra o "Terminal" no seu computador (ou "Prompt de Comando" ou "PowerShell" no Windows), copie e cole o comando a seguir e execute-o.

pip install Flask

*Não se preocupe se estiver se perguntando "O que é pip?". Apenas pense nele como um comando que vem com o Python para adicionar ferramentas (bibliotecas) úteis.


2. Preparando a Pasta de Trabalho e os Arquivos

Em seguida, vamos criar um lugar (uma pasta) para armazenar os projetos e materiais do nosso aplicativo. Crie uma nova pasta chamada "csv_app" em qualquer lugar que você goste no seu computador.

Então, crie os três itens a seguir dentro dessa pasta "csv_app".

  • app.py: O arquivo de projeto Python que define a lógica principal do aplicativo.
  • data.csv: O arquivo CSV contendo os dados que você deseja exibir no navegador.
  • Uma pasta templates
    • Dentro desta pasta, crie index.html. Este arquivo define a aparência da página exibida no navegador.

Sua estrutura de pastas deve ficar assim:

csv_app/
├── app.py
├── data.csv
└── templates/
    └── index.html

【Ponto Chave】Você deve colocar o arquivo HTML dentro de uma pasta chamada "templates". Esta é uma regra do Flask; é uma convenção para dizer ao Flask: "Ei, os arquivos de layout da página estão aqui." Se você usar um nome diferente, receberá um erro, então tenha cuidado.


PASSO 2: Vamos Preparar os Dados para Exibição (data.csv)

A seguir, vamos preparar os dados CSV para nosso aplicativo. Copie e cole o seguinte conteúdo no arquivo data.csv que você criou e salve-o.

Para este exemplo, usaremos uma lista de membros simples.

ID,Nome,Email,DataDeRegistro
1,Maria Silva,maria.silva@example.com,2024-05-01
2,Joao Santos,joao.santos@example.com,2024-05-15
3,Ana Pereira,ana.pereira@example.com,2024-06-03
4,Pedro Costa,pedro.costa@example.com,2024-06-21
5,Sofia Sousa,sofia.sousa@example.com,2024-07-10

Um Ponto de Atenção: Codificação de Caracteres

Ao salvar o arquivo, recomendamos definir a codificação de caracteres como "UTF-8". Isso é como uma regra universal para os computadores entenderem os caracteres. Usá-la evita o fenômeno de "texto corrompido", onde o texto pode aparecer como "???".

Quando eu era iniciante, passei horas lutando com esse problema de codificação... Se seu aplicativo não funcionar corretamente e você vir texto ilegível, a primeira coisa que você deve verificar é a codificação deste arquivo CSV.


PASSO 3: Vamos Escrever o Programa Python para Rodar o Servidor (app.py)

Agora, o programa principal! Copie e cole o código inteiro abaixo em seu arquivo app.py. Explicarei o que cada parte significa em detalhes após o bloco de código.

# Importar as ferramentas (bibliotecas) necessárias
from flask import Flask, render_template
import csv

# Criar a instância principal do aplicativo Flask
app = Flask(__name__)

# Definir o processo para quando um URL específico é acessado
@app.route('/')
def index():
    # Preparar para abrir e ler o arquivo CSV
    # Especificar encoding='utf-8' para evitar texto corrompido
    with open('data.csv', 'r', encoding='utf-8') as file:
        # Usar o leitor do módulo csv para ler os dados separados por vírgula
        csv_reader = csv.reader(file)
        
        # Ler a primeira linha (o cabeçalho) primeiro
        header = next(csv_reader)
        
        # Ler as linhas de dados restantes para uma lista
        data = [row for row in csv_reader]

    # Passar os dados para o HTML e gerar a página
    return render_template('index.html', header=header, data=data)

# Se este arquivo for executado diretamente, inicie o servidor da web
if __name__ == '__main__':
    # Definir debug=True é conveniente, pois o servidor será reiniciado automaticamente quando você modificar o código
    app.run(debug=True)

Explicação do Código (Uma Visão Geral Rápida)

  • from flask import ..., import csv
    Isso é como um feitiço para habilitar as caixas de ferramentas úteis chamadas "Flask" e "csv" que estamos prestes a usar.
  • app = Flask(__name__)
    Isso cria o corpo principal do aplicativo Flask. É uma convenção padrão, então, por enquanto, apenas aceite como "é assim que se escreve".
  • @app.route('/')
    Isto é como uma folha de instruções que diz: "Quando uma solicitação chegar à página principal do site ('/'), execute a função logo abaixo (index())."
  • def index():
    Este é o processo real que é executado quando a página principal é acessada.
    • with open(...): Isso abre o arquivo CSV. A parte encoding='utf-8' é um ponto chave para evitar texto corrompido. Usar with é conveniente porque fecha o arquivo automaticamente após o término do processo.
    • csv.reader(file): Esta é uma função que pega o arquivo CSV aberto e o divide por vírgulas, tornando-o fácil para o Python manusear.
    • header = next(csv_reader): Isso pega a primeira linha do arquivo CSV (ID, Nome, ...) e a armazena como o "cabeçalho".
    • data = [row for row in csv_reader]: Isso pega todas as linhas de dados restantes e as armazena em uma lista (uma coleção de dados) chamada "data".
  • return render_template(...)
    Esta é a parte mais crucial. É uma ordem para o Flask, dizendo: "Por favor, crie uma página da web usando o arquivo de layout chamado index.html! E já que está fazendo isso, estou passando as informações de header e data que acabei de ler, então use-as também!"
  • if __name__ == '__main__': ...
    Esta é uma frase padrão para iniciar o servidor web de desenvolvimento quando este arquivo Python é executado diretamente.

Pode parecer um monte de feitiços no início, mas você vai ficar bem assim que entender o fluxo simples de "ler o arquivo" e "passá-lo para o HTML"!


PASSO 4: Vamos Criar o Layout de Exibição (HTML) (templates/index.html)

A seguir, criaremos o arquivo HTML que atuará como o "recipiente" para exibir os dados passados pelo Python. Copie e cole o seguinte código no arquivo index.html dentro da sua pasta templates.

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visualizador de Dados CSV</title>
    <!-- Estilos simples para o modo escuro -->
    <style>
        body {
            background-color: #202124;
            color: #e8eaed;
            font-family: sans-serif;
            padding: 2rem;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 1rem;
        }
        th, td {
            border: 1px solid #5f6368;
            padding: 12px;
            text-align: left;
        }
        th {
            background-color: #3c4043;
            color: #e8eaed;
        }
    </style>
</head>
<body>
    <h1 style="color: #669df6;">Lista de Dados CSV</h1>

    <!-- Exibir a tabela se houver dados -->
    {% if data %}
    <table>
        <thead>
            <tr>
                <!-- Exibir o cabeçalho passado pelo Python -->
                {% for col in header %}
                    <th>{{ col }}</th>
                {% endfor %}
            </tr>
        </thead>
        <tbody>
            <!-- Exibir os dados passados pelo Python linha por linha -->
            {% for row in data %}
            <tr>
                {% for cell in row %}
                    <td>{{ cell }}</td>
                {% endfor %}
            </tr>
            {% endfor %}
        </tbody>
    </table>
    {% else %}
    <p>Não há dados para exibir.</p>
    {% endif %}

</body>
</html>

Símbolos Especiais no HTML: {% ... %} e {{ ... }}

Você pode notar alguns símbolos desconhecidos neste código HTML, como {% ... %} e {{ ... }}. Esta é a sintaxe do Jinja2, o motor de templates que o Flask usa.

  • {% for ... %} ... {% endfor %}
    Isso serve ao mesmo propósito que um "loop for" em Python. Significa: "Repita o HTML aqui dentro para cada pedaço de dado passado pelo Python". Isso permite que você gere automaticamente 5 linhas de tabela se tiver 5 linhas de dados, ou 100 linhas se tiver 100.
  • {{ ... }}
    Este é um marcador de posição para exibir o "conteúdo" de uma variável passada pelo Python. {{ col }} exibe o nome da coluna do cabeçalho, e {{ cell }} exibe o conteúdo de cada célula de dados.

Ao separar o Python (processamento de dados) do HTML (apresentação) desta forma, seu código se torna mais fácil de gerenciar e é mais simples construir aplicativos mais complexos. Este é um dos maiores benefícios de usar um framework como o Flask.


PASSO 5: Vamos Rodar o App!

Certo, todos os preparativos estão concluídos! Finalmente é hora de rodar o aplicativo.

Abra seu terminal (ou Prompt de Comando) novamente e use o comando cd para navegar até a pasta "csv_app" que você criou anteriormente.

Em seguida, execute o seguinte comando:

python app.py

Após executar o comando, você deve ver uma mensagem como esta em seu terminal:

 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: ...

Se você vir uma mensagem como "Running on http://127.0.0.1:5000", deu certo! Um servidor web está agora rodando no seu computador.

Abra seu navegador da web (como o Google Chrome) e copie e cole a seguinte URL na barra de endereços:

http://127.0.0.1:5000

Como ficou? O conteúdo de data.csv agora deve ser exibido em uma tabela organizada em seu navegador! Esta é a aplicação web que você construiu com Python. Parabéns! 🎉


【Seção Bônus】Tornando Tudo Ainda Mais Fácil com Pandas!

O método atual funciona bem, mas o Python tem uma biblioteca incrivelmente poderosa para análise de dados chamada Pandas. Usá-la torna a leitura de arquivos CSV e a conversão para HTML ainda mais simples.

Se você estiver interessado, definitivamente experimente.

1. Instalando o Pandas

Primeiro, vamos instalar o Pandas. No seu terminal (depois de parar o servidor com Ctrl+C), execute este comando:

pip install pandas

2. Modificando o app.py

Reescreva o app.py da seguinte forma. Você consegue ver como a parte de leitura do CSV ficou muito mais curta?

from flask import Flask, render_template
import pandas as pd # importe o pandas como pd

app = Flask(__name__)

@app.route('/')
def index():
    # Leia o arquivo CSV usando o Pandas (apenas uma linha!)
    df = pd.read_csv('data.csv', encoding='utf-8')
    
    # Converta o DataFrame para uma tag de tabela HTML (também uma linha!)
    # Você pode especificar classes CSS com o atributo classes, remover a borda com border=0, etc.
    html_table = df.to_html(classes='data-table', index=False, border=0)
    
    # Passe os dados da tabela para o HTML para gerar a página
    return render_template('index_pandas.html', table=html_table)

if __name__ == '__main__':
    app.run(debug=True)

3. Criando o index_pandas.html

Como o Pandas gera todo o HTML da tabela, o próprio arquivo HTML também se torna mais simples. Crie um novo arquivo chamado index_pandas.html em sua pasta templates e cole o seguinte código.

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visualizador de Dados CSV (Versão Pandas)</title>
    <style>
        body {
            background-color: #202124;
            color: #e8eaed;
            font-family: sans-serif;
            padding: 2rem;
        }
        /* Aplique estilos ao nome da classe especificado em to_html */
        .data-table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 1rem;
        }
        .data-table th, .data-table td {
            border: 1px solid #5f6368;
            padding: 12px;
            text-align: left;
        }
        .data-table thead th { /* Estilos da linha do cabeçalho */
            background-color: #3c4043;
            color: #e8eaed;
        }
    </style>
</head>
<body>
    <h1 style="color: #669df6;">Lista de Dados CSV (Versão Pandas)</h1>

    <!-- Exiba a tabela HTML passada do Python(Pandas) como está -->
    {{ table|safe }}

</body>
</html>

A parte principal é {{ table|safe }}. O código HTML gerado pelo Pandas inclui tags como <table>, então adicionamos o filtro |safe para dizer ao Flask: "Este é um HTML seguro, por favor, renderize-o como está".

Se você executar python app.py novamente e acessar a página, uma tabela semelhante deverá ser exibida. O código está muito mais limpo, e a porta para manipulação de dados mais avançada foi aberta!


Conclusão: Um Pequeno "Eu Consegui!" se Torna um Grande Passo à Frente

Neste artigo, criamos um aplicativo web simples para exibir dados CSV em um navegador usando Python e Flask. Você conseguiu experimentar a sensação de "copiar, colar e funcionar"?

Aprender a programar é como escalar uma montanha enorme. Se você mirar o cume desde o início, ficará desanimado com a inclinação. Mas se você completar pequenas metas uma a uma, como "Primeiro, vamos ao acampamento base" ou "A seguir, vamos àquela colina com a vista bonita", você pode firmemente chegar ao topo.

Eu ficaria muito feliz se o pequeno sucesso de "O código que eu escrevi (ou colei) fez um aplicativo web funcionar!" que você experimentou neste artigo lhe der a confiança para dar o próximo passo.

A partir daqui, tente fazer suas próprias modificações, como "Vamos adicionar uma função de busca" ou "Vamos tornar os dados editáveis". Não há problema se você receber erros; eles fazem parte do processo de aprendizagem. Por favor, aproveite a diversão de construir seu próprio aplicativo exclusivo enquanto pede ajuda à IA ou pesquisa por mensagens de erro online.


Bônus: O Código-Fonte HTML Completo e Funcional (Resultado do Navegador)

Para sua referência, aqui está o código-fonte HTML real que é gerado no navegador da web quando você executa o primeiro aplicativo que criamos (a versão da biblioteca padrão). Pode ser útil para ter uma ideia de como o programa Python cria dinamicamente este HTML com base no conteúdo do arquivo CSV.

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visualizador de Dados CSV</title>
    <!-- Estilos simples para o modo escuro -->
    <style>
        body {
            background-color: #202124;
            color: #e8eaed;
            font-family: sans-serif;
            padding: 2rem;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 1rem;
        }
        th, td {
            border: 1px solid #5f6368;
            padding: 12px;
            text-align: left;
        }
        th {
            background-color: #3c4043;
            color: #e8eaed;
        }
    </style>
</head>
<body>
    <h1 style="color: #669df6;">Lista de Dados CSV</h1>

    <!-- Exibir a tabela se houver dados -->
    
    <table>
        <thead>
            <tr>
                <!-- Exibir o cabeçalho passado pelo Python -->
                
                    <th>ID</th>
                
                    <th>Nome</th>
                
                    <th>Email</th>
                
                    <th>DataDeRegistro</th>
                
            </tr>
        </thead>
        <tbody>
            <!-- Exibir os dados passados pelo Python linha por linha -->
            
            <tr>
                
                    <td>1</td>
                
                    <td>Maria Silva</td>
                
                    <td>maria.silva@example.com</td>
                
                    <td>2024-05-01</td>
                
            </tr>
            
            <tr>
                
                    <td>2</td>
                
                    <td>Joao Santos</td>
                
                    <td>joao.santos@example.com</td>
                
                    <td>2024-05-15</td>
                
            </tr>
            
            <tr>
                
                    <td>3</td>
                
                    <td>Ana Pereira</td>
                
                    <td>ana.pereira@example.com</td>
                
                    <td>2024-06-03</td>
                
            </tr>
            
            <tr>
                
                    <td>4</td>
                
                    <td>Pedro Costa</td>
                
                    <td>pedro.costa@example.com</td>
                
                    <td>2024-06-21</td>
                
            </tr>
            
            <tr>
                
                    <td>5</td>
                
                    <td>Sofia Sousa</td>
                
                    <td>sofia.sousa@example.com</td>
                
                    <td>2024-07-10</td>
                
            </tr>
            
        </tbody>
    </table>
    

</body>
</html>