Escolar Documentos
Profissional Documentos
Cultura Documentos
No meu sistema de cadastro de produtos, preciso criar uma funcionalidade que, a partir
de um arquivo CSV com dados dos produtos, eu consigo ler esse arquivo e separar
todos os produtos contido nele. Para representar um produto temos a seguinte classe:
class Produto(object):
def __init__(self, nome, valor):
self.__nome = nome
self.__valor = valor
@property
def nome(self):
return self.__nome
@nome.setter
def nome(self, nome):
self.__nome = nome
@valor.setter
def valor(self, valor):
self.__valor = valor
def __repr__(self):
return "nome:%s valor:%s" % (self.__nome, self.__valor)
nome, valor camiseta, 25.0 jaqueta, 125.0 tenis, 80.0 bermuda, 40.0
Nesse meu sistema, irei ler esse arquivo a partir do diretório portanto,
"arquivos/produtos/"
arquivo = 'arquivo/produtos/dados.csv'
Implementando a função de
leitura do arquivo
Agora precisamos criar uma função que ficará responsável em ler esses produtos por
meio da variável , portanto, criaremos a função
arquivo passando o
ler_produtos() arquivo
como parâmetro:
def ler_produtos(arquivo):
arquivo = 'arquivo/produtos/dados.csv'
Primeiro, precisamos abrir o arquivo CSV, ou seja, utilizaremos a função open enviando
a variávelarquivoe utilizando parâmetro 'rb' que indica leitura:
def ler_produtos(arquivo):
arquivo_aberto = open(arquivo, 'rb')
No Python, para ler um arquivo CSV, podemos utilizar a função reader do módulo , csv
import csv
def ler_produtos(arquivo):
arquivo_aberto = open(arquivo, 'rb')
return csv.reader(arquivo_aberto,delimiter=',')
Observe que também adicionamos o parâmetro delimiter que já separa cada informação
a partir de um critério, nesse caso, cada informação será separada no momento em que
aparecer uma vírgula, e também, estamos retornando a função reader que é justamente
o arquivo lido.
Então vamos realizar um teste, faremos a chamada para a função ler_produtos e
devolveremos para a variável :
dados
import csv
def ler_produtos(arquivo):
arquivo_aberto = open(arquivo, 'rb')
return csv.reader(arquivo_aberto,delimiter=',')
arquivo = 'arquivo/produtos/dados.csv'
dados = ler_produtos(arquivo)
Verificando a existência do
arquivo
Opa! Ele não conseguiu achar o meu arquivo! Por que será que isso aconteceu?
Vejamos dentro do diretório onde está o meu projeto:
De fato não existe esse diretório, então o que devemos fazer? Antes mesmo de
tentarmos pegar o arquivo, temos que verificar se ele pelo menos existe! Em outras
palavras, precisamos primeiro verificar se o caminho que queremos encontrar existe,
caso não exista, precisamos criá-lo!
Portanto, o nosso primeiro passo é separar a variável em duas, ou seja, a
arquivo arquivo
e :
caminho
caminho = 'arquivo/produtos'
arquivo = caminho + '/dados.csv'
o diretório existe e o arquivo também, caso não exista, ela deverá criá-los! Então vamos
criá-la:
import csv
def verificar_arquivo():
caminho = 'arquivo/produtos' arquivo = caminho + '/dados.csv'
def ler_produtos(arquivo):
arquivo_aberto = open(arquivo, 'rb')
return csv.reader(arquivo_aberto,delimiter=',')
dados = ler_produtos(arquivo)
Verificando a existência do
diretório
Qual é o nosso próximo passo? É justamente verificar se o diretório não existe. Para
isso, no Python, podemos utilizar o módulo os com funções capazes de realizar
chamadas de sistema.
Nesse nosso primeiro caso, utilizaremos a função que verifica se existe um
path.exists
def verificar_arquivo():
caminho = 'arquivo/produtos'
arquivo = caminho + '/dados.csv'
if not os.path.exists(caminho):
Observe que estamos varificando se o diretório não existe, caso isso for verdade, o que
devemos fazer? Precisamos criar o diretório! Mas como criamos um diretório no
Python? Simples! No modulo , temos também a função
os que cria diretórios:
makedirs
def verificar_arquivo():
caminho = 'arquivo/produtos'
arquivo = caminho + '/dados.csv'
if not os.path.exists(caminho):
os.makedirs(caminho)
Criando o arquivo
Para criar um arquivo, utilizaremos a função open passando o segundo parâmetro com o
valor "w" que indica a criação para escrita:
def verificar_arquivo():
caminho = 'arquivo/produtos'
arquivo = caminho + '/dados.csv'
if not os.path.exists(caminho):
os.makedirs(caminho)
if not os.path.exists(arquivo):
open(arquivo, 'w')
def verificar_arquivo():
caminho = 'arquivo/produtos'
arquivo = caminho + '/dados.csv'
if not os.path.exists(caminho):
os.makedirs(caminho)
if not os.path.exists(arquivo):
open(arquivo, 'w')
return arquivo
Exibindo as informações
Agora vamos imprimir os dados para verificar os valores, porém, ao invés de fazer um
forde forma procedural, utilizaremos o recurso de compreensão de lista:
print [dado for dado in dados]
Note que o primeiro valor ainda é o cabeçalho, isto é, linhas 'nome' e 'valor'. Para
eliminarmos esse cabeçalho basta chamarmos a função antes de iterar a variável
next
dados:
Situações inesperadas
Observe que todos os dados foram lidos sem nenhum problema! Entretanto, se o
caminho ao invés de ser um diretório, fosse um arquivo? O que será que
"arquivo/produtos"
Podemos adicionar uma que será acionado caso exista um arquivo ou diretório de
elfi
Caso for verdade, ou seja, o caminho especificado não for um diretório, simplesmente
lançamos um erro de IOError avisando que o caminho que estamos utilizando não é um
diretório:
Conclusão
Nesse post, vimos os problemas que podemos ter durante a leitura de arquivos dentro
de diretórios, isto é, antes de tentarmos realizar a leitura de um arquivo precisamos
sempre verificar se o caminho, nesse caso diretório, e o arquivo realmente existem,
caso não, precisamos criá-los, caso sim, apenas lemos!
Gostou da dica? Então compartilhe conosco o que achou nos comentários :)
E que tal aprender a desenvolver com o Python hoje mesmo? Na Alura, temos a cursos
de Python, onde você vai aprender desde o zero até uma aplicação web usando o
Python.
Alex Felipe
Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Criador de mais de
40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API,
personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em
Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do
mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura
e hoje ainda escreve artigos técnicos.
Leia também:
Como publicar seu código Python no PyPI
Python: Saiba o que são iteradores
Python: Lidando com erros e exceções
Fazendo o deploy de uma aplicação Django
Python: A diferença das funções input() e raw_input()
Python: Qual a diferença entre == e is?
Python: Trabalhando com dicionários
Python datetime: Como faço para definir data e hora em Python?
Quer mergulhar em
tecnologia e aprendizagem?
Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado
de trabalho, ciência e desenvolvimento de software
Escreva seu email
ME INSCREVA
Institucional A Alura
Sobre nós Como Funciona
Trabalhe conosco Todos os cursos
Para Empresas Depoimentos
Para Escolas Instrutores(as)
Política de Privacidade Dev em <T>
Compromisso de Integridade
Termos de Uso
Status
Novidades e Lançamentos
ENVIAR
CURSOS
Cursos de Programação
Lógica | Python | PHP | Java | .NET | Node JS | C | Computação | Jogos | IoT
Cursos de Front-end
HTML, CSS | React | Angular | JavaScript | jQuery
Cursos de Data Science
Ciência de dados | BI | SQL e Banco de Dados | Excel | Machine Learning | NoSQL | Estatística
Cursos de DevOps
AWS | Azure | Docker | Segurança | IaC | Linux
Cursos de UX & Design
Usabilidade e UX | Vídeo e Motion | 3D
Cursos de Mobile
React Native | Flutter | iOS e Swift | Android, Kotlin | Jogos
Cursos de Inovação & Gestão
Métodos Ágeis | Softskills | Liderança e Gestão | Startups | Vendas