Como ler arquivos CSV em python

Existem várias formas de ler arquivos CSV em Python. Por padrão o python já oferece um pacote para trabalharmos com arquivos CSV.

Neste post vamos ver como ler arquivos CSV usando o pacote csv do python.

>> Como ler arquivos CSV em java

CSV de exemplo

Para os exemplos destes post, vamos usar um CSV simples. Considere que o arquivo pessoas.csv esteja em algum lugar acessível para o seu programa python e tenha este conteúdo:

nome,idade,email
Gustavo,28,gustavo@dicasdeprogramcao.com.br
Joao,35,joao@dicasdepython.com.br
Maria,23,maria@dicasdeprogramacao.com.br
Ana,25,ana@dicasdepython.com.br

Lendo CSV como array de Strings em python

O código abaixo mostrar como ler o arquivo CSV como um array de Strings e imprime na tela os valores de cada linha separadamente.

import csv

arquivo = open('pessoas.csv')

linhas = csv.reader(arquivo)

for linha in linhas:
    print(linha)

Saída:

['nome', 'idade', 'email']
['Gustavo', '28', 'gustavo@dicasdeprogramcao.com.br']
['Joao', '35', 'joao@dicasdepython.com.br']
['Maria', '23', 'maria@dicasdeprogramacao.com.br']
['Ana', '25', 'ana@dicasdepython.com.br']

Repare que este algoritmo considera o cabeçalho como uma linha normal.

Lendo CSV como um dicionário em python

Uma interessante forma de se obter os dados de um CSV é na forma de um dicionário. O código abaixo mostra como fazer isso.

import csv

arquivo = open('pessoas.csv')

pessoas = csv.DictReader(arquivo)

for pessoa in pessoas:
    print("Nome:", pessoa["nome"], " - Idade:", pessoa["idade"], " - Email:", pessoa["email"])

Saída:

Nome: Gustavo  - Idade: 28  - Email: gustavo@dicasdeprogramcao.com.br
Nome: Joao  - Idade: 35  - Email: joao@dicasdepython.com.br
Nome: Maria  - Idade: 23  - Email: maria@dicasdeprogramacao.com.br
Nome: Ana  - Idade: 25  - Email: ana@dicasdepython.com.br

Repare que neste exemplo o cabeçalho não foi considerado como uma linha normal, ele foi usado para dar nome às chaves do dicionário.

Referências:

  1. pacote csv do python
  2. Códigos-fonte deste post
Twitter
Facebook
LinkedIn
Email