Como ler um arquivo CSV ou TXT usando Python
25, dezembro, 2011
Sem comentários
Continuando o artigo anterior, onde eu tive a necessidade de ler 3 arquivos em formatos de textos mas com padrões diferentes, em que precisei padronizá-los para cadastrar num banco de dados MySQL, vou mostrar como fiz para ler os arquivos CSV e TXT, e depois salvar em arquivos temporários (para manter os originais).
import csv
import re
import os
nome = raw_input("Nome do arquivo: ") # deve ser digitado o caminho do arquivo também
ifile = open(nome, "r") # arquivo de leitura, original
ofile = open(nome + ".tmp", "w+") # arquivo temporário, de leitura e gravação
for line in ifile:
linha = line;
#print "Substituindo '\\t\r' por ''"
pattern = re.compile(r'\t\r')
linha = pattern.sub("",linha)
#print "Substituindo ',' por '.'"
pattern = re.compile(r',')
linha = pattern.sub(".",linha)
#print "Substituindo '\t' por ','"
pattern = re.compile('\t')
linha = pattern.sub(",",linha)
#print "Padronizando as datas... \n"
pattern = re.compile(r'([0-9]{2})/([0-9]{2})/([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})')
linha = pattern.sub(r"\3-\2-\1 \4:\5:\6",linha)
print '\n' + line + '\n' + linha + '\n'
ofile.write(linha)
ofile.close()
ifile.close()
Neste ponto, foram feitas algumas substituições utilizando expressões regulares a partir do arquivo original, e salvando num arquivo temporário com a extensão .tmp. Agora vamos abrir o arquivo temporário para leitura. No meu caso, utilizei os dados para cadastrá-los no banco MySQL, mas neste exemplo, apenas vamos imprimir o resultado na tela.
ofile = open(nome + ".tmp", "rb") reader = csv.reader(ofile) rownum = 0 for row in reader: # Salva o cabeçalho if rownum == 0: header = row else: colnum = 0 for col in row: # imprime a linha, com o respectivo nome do campo, salvo do cabeçalho print '%-8s: %s - %d' % (header[colnum], col, colnum) colnum += 1 rownum += 1 ofile.close() os.remove(nome + ".tmp")
