1
resposta

Tentando importar um arquivo csv ou json para o Flask

Boa Noite,

Eu criei uma tabela com alguns dados tanto no formato csv quanto no formato json e estou tentando importar para o Flask para poder usar lá. Existe alguma função ou método pratico para fazer isso ?

Muito Obrigado

1 resposta

Oiii André, como você está? Espero que esteja bem ^-^

Sinto muito pela demora em obter um retorno. Vamos lá:

Há várias maneiras de fazer a leitura de um arquivo tanto csv quanto json, um método prático seria através da biblioteca pandas.

CSV

Suponha o seguinte arquivo csv que contém dados sobre jogos:

Nome,Categoria,Console
Super Mario,Ação,SNES
Pokemon Gold,RPG,GBA

A biblioteca pandas disponibiliza a função read_csv para que possamos trabalhar com esse tipo de arquivo. Em código ficará da seguinte maneira:

import pandas as pd

arquivo_csv = pd.read_csv('jogos.csv')

print(arquivo_csv) 

Como saída será apresentado:

           Nome Categoria Console
0   Super Mario      Ação    SNES
1  Pokemon Gold       RPG     GBA

E para pegar os dados de uma coluna específica, basta acessarmos a chave correspondente, onde essa chave será o nome da coluna: arquivo_csv['Nome']. Tudo bem?!

Uma propriedade importante é a values, através dela será retornada uma lista de valores, seja da coluna ou do arquivo csv inteiro.

Veja um exemplo em um cenário onde capturamos apenas os valores da coluna Nome

for nome_jogo in arquivo_csv['Nome'].values:
    print(nome_jogo)

JSON

Supondo o seguinte arquivo json:

{
    "Nomes": [
        "Super Mario",
        "Pokemon Gold"
    ],
    "Categoria": [
        "Ação",
        "SNES"
    ],
    "Console": [
        "RPG",
        "GBA"
    ]
}

A leitura não será muito diferente da que fizemos para o csv, mas utilizaremos a função read_json, veja como fica em código:

import pandas as pd

arquivo_csv = pd.read_json('jogos.json', encoding='utf-8')

for nome_jogo in arquivo_csv['Nomes'].values:
    print(nome_jogo)

Após a leitura tanto dos arquivos csv quanto json, para passá-los ao Flask teremos que instanciar a classe Jogo com os dados do arquivo lido. E faremos isso utilizando a propriedade values para todo o arquivo csv:

import pandas as pd

class Jogo:
    def __init__(self, nome, categoria, console):
        self.nome = nome
        self.categoria = categoria
        self.console = console


arquivo_csv = pd.read_csv('jogos.csv', encoding='utf-8', dtype=str)

lista_de_jogos = []

for item in arquivo_csv.values:
    nome, categoria, console = item # a variável item irá retornar uma lista com os valores de nome, categoria e console, nessa linha estamos tirando cada valor dessa lista e colocando em uma variável
    jogo = Jogo(nome, categoria, console) # instanciamos a classe Jogo com os valores lidos
    lista_de_jogos.append(jogo) # guardamos o objeto instanciado na lista

Agora que já temos os dados em nossa lista_de_jogos podemos passá-los para a função render do template:

return render_template('lista.html', titulo='Jogos', jogos=lista_de_jogos)

Qualquer dúvida estou por aqui, tá bom?

Abraços e bons estudos!