11 de jun de 2013

Python - Módulo CSV


    O módulo csv é usado para ler arquivos do formato csv (comma-separated values), usado pelo excel e vários outros programas. Cada csv possui um número de linhas e colunas, por exemplo:

filmes.csv:
Titulo,Genero,Data 
Monty Python e o Cálice Sagrado,Comédia,1975
A Vida de Brian,Comédia,1979
   

  • Construtores:
csv.reader(arquivo_csv) -> reader
  Cria um objeto reader para parsear o arquivo, retornando a sequência de valores de cada linha. Sintaxe: ler_csv = csv.reader(open("arquivo.csv", "rb")).

csv.writer(arquivo_csv) -> writer
    Cria um objeto writer que pode formatar a sequência de valores e escrever as linhas no arquivo. Sintaxe: escrever_csv = csv.writer(open("arquivo.csv", "wb")).

   O csv reader vai ler o arquivo, parseando as vírgulas e aspas, retornando os valores dos elementos de cada linha em uma sequência. O csv writer vai criar um arquivo, adicionando os caracteres necessários, geralmente vírgulas ou aspas.

   Para ler os arquivos csv podemos usar um loop nas linhas e o método split ($ python -m pydoc str.split) para pegar as colunas individuais.

split_csv.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# www.zeldani.blogspot.com.br

import csv

print "### Exemplo 01: ###"
for linha in open("filmes.csv"):
    titulo, genero, ano = linha.split(",")
    print titulo, ano

reader = csv.reader(open("filmes.csv"))

print "### Exemplo 02: ###\n"
for titulo, genero, ano in reader:
    print reader.line_num, ano, titulo

    Retorno:
### Exemplo 01: ###
Título  Ano
Monty Python e o Cálice Sagrado  1975
A Vida de Brian  1979
Monty Python's Flying Circus 1969-74

### Exemplo 02: ###

1  Ano Título
2  1975 Monty Python e o Cálice Sagrado
3  1979 A Vida de Brian
4  1969-74 Monty Python's Flying Circus

    A função reader vai pegar a sequência ou o objeto iterável, e vai retorná-lo. No exemplo 02, o line_num vai retornar o número da linha do arquivo.
  Para escrever um csv usamos o método writer, no exemplo abaixo foi utilizado o delimitador ";" para separar os elementos e o caractere de acentuação ' " '.

write_csv.py:
import csv

csv_original  = open('filmes.csv', "rb")
reader = csv.reader(csv_original)
csv_modificado  = open('troll.csv', "wb")
writer = csv.writer(csv_modificado, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL)

for linha in reader:
    writer.writerow(linha)
    print linha[0], linha[2]

csv_original.close()
csv_modificado.close()

    O arquivo troll.csv ficará assim:
"Título";" Gênero";" Ano"
"Monty Python e o Cálice Sagrado";" Comédia";" 1975"
"A Vida de Brian";" Comédia";" 1979"


csv.DictReader(arquivo_csv, <campos>) -> DictReader
  Cria um objeto DictReader que pode parsear o arquivo, retornando um dicionário com os valores de cada linha. As chaves do dicionário são geralmente a primeira linha do arquivo. Você pode, opcionalmente, dar nomes aos campos se eles não estiverem na primeira linha do arquivo. O arquivo csv pode ser um objeto iterável.

csv.DictWriter(arquivo_csv, campos) -> DictWriter
   Cria um objeto DictWriter que pode formatar o valor do dicionário e escrever as linhas do arquivo. Você deve dar a sequência de nomes usado para formatar cada item do dicionário.

dict_csv:
import csv

csv_file = csv.DictReader(open('filmes.csv', 'rb'), delimiter=',')

for linha in csv_file:
    print linha['Titulo']

    Retorno:
Monty Python e o Cálice Sagrado
A Vida de Brian
Monty Python's Flying Circus


* Fontes:
http://docs.python.org/2/library/csv.html
http://www.pythonforbeginners.com/systems-programming/using-the-csv-module-in-python/
http://effbot.org/librarybook/csv.htm
http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch34s02.html
http://pt.kioskea.net/faq/10376-python-ler-e-gravar-arquivos-csv
http://www.gadzmo.com/python/reading-and-writing-csv-files-with-python-dictreader-and-dictwriter/

0 comentários:

Postar um comentário