#-*- coding: latin1 -*- from string import join from math import ceil class DataLoad(object): PlanilhaPath = 'dump_inicial.csv' CategoriasPath = 'categorias.csv' DumpPath = 'dump.sql' TableLocacao = ('fk_categoria','proprietario','responsavel','nascimento','cpf','rg','profissao','locacao','endereco','bairro','cidade','estado','cep','ddd','telefone','ddd_celular','celular','ddd_comercial','telefone_c','ddd','fax','email','observacoes','valores','som','animais','pesquisa','posicao','fotografo','fotos_data','banco_nome','banco_cpf','banco_banco', 'banco_agencia', 'banco_conta') DbName = 'primeiraproducao' MaxInserts = 50 def __init__(self): print 'Processando...' self.DictCategorias = {} Data = {} Data['DbName'] = self.DbName print 'Dicionario Estrutural carregado.' Data['Categorias'] = self.Load('categorias', self.CategoriasPath) print 'Categorias carregadas.' DataMatriz = self.Load('planilha', self.PlanilhaPath) print 'Planilha Carregada.' Template = SqlTemplate(int(ceil(self.NumReg/self.MaxInserts))) print 'Template carregado.' Template = Template.str % Data a = file('teste.txt', 'w') a.writelines(DataMatriz) a.close() #print len(DataMatriz) Template = Template % DataMatriz try: File = open(self.DumpPath, 'wb') File.write(Template) File.close() except: print ' Ocorreu um erro na gravação do arquivo DUMP.' else: print 'Arquivo SQL gravado.' def __del__(self): print 'Ok.' def Load(self, who, CsvPath): try: File = open(CsvPath) CsvFile = File.readlines() File.close() except: print ' Ocorreu um erro no carregamento do arquivo CSV.' else: if who == 'planilha': return self.LoadPlanilha(CsvFile) elif who == 'categorias': return self.LoadCategorias(CsvFile) def LoadPlanilha(self, CsvFile): del CsvFile[0] #deleta rotulos self.NumReg = len(CsvFile) Steps = ceil(self.NumReg/self.MaxInserts) Matriz, List = [], [] for Line in CsvFile: Campos = Line.split('|') Campos[0] = self.DictCategorias[Campos[0].upper().strip(' ')] #troca da categoria por índice Campos[13] = Campos[13]+Campos[14] #DDD + telefone Campos[15] = Campos[15]+Campos[16] #DDD_celular + celular Campos[17] = Campos[17]+Campos[18] #DDD_comercial + telefone_comercial Campos[19] = Campos[19]+Campos[20] #DDD_fax + fax del Campos[14], Campos[16], Campos[18], Campos[20] #Forma lista de registros Dados = [] for Item in Campos: if isinstance(Item, str): Temp = Item.replace('\n','').strip(' ') else: Temp = Item Dados.append(Temp) List.append('(%s)' % ', '.join(str(D) for D in Dados)) #Salva Conjunto de Inserts if len(List) == self.MaxInserts: Matriz.append('"%s",\n' % ',\n'.join(str(L) for L in List)) List = [] Steps -= 1 #Salva Inserts restantes if Steps > 0: Matriz.append('"%s",\n' % ',\n'.join(str(L) for L in List)) #Retorna Matriz return Matriz def LoadCategorias(self, CsvFile): List = [] Index = 0 for WordLine in CsvFile: WordLine = WordLine.replace('\n','').strip(' ') if not self.DictCategorias.has_key(WordLine): Index += 1 self.DictCategorias[WordLine.upper()] = Index List.append("('%s')" % WordLine) return join(List, ',\n') class SqlTemplate(object): UseDb = 'USE `%(DbName)s`;\n\n' InsertCategoria = '''INSERT INTO `%(DbName)s`.`categoria` (`nome`) VALUES %(Categorias)s;\n\n''' InsertLocacao = '''INSERT INTO `%(DbName)s`.`locacao` (`fk_categoria`,`proprietario`,`responsavel`,`nascimento`,`cpf`,`rg`,`profissao`,`locacao`,`endereco`,`bairro`,`cidade`,`estado`,`cep`,`telefone`,`celular`,`telefone_c`,`fax`,`email`,`observacoes`,`valores`,`som`,`animais`,`pesquisa`,`posicao`,`fotografo`,`fotos_data`,`banco_nome`,`banco_cpf`,`banco_banco`, `banco_agencia`, `banco_conta`) VALUES %%s;''' def __init__(self, NumInserts): Inserts = '\n\n'.join(self.InsertLocacao for i in range(NumInserts)) self.str = self.UseDb + self.InsertCategoria + Inserts if __name__ == '__main__': load = DataLoad()