Commits

Jesús Jerez committed 198973f

optimizado lectura y creación de archivos

Comments (0)

Files changed (1)

convertir/csv2sql.py

 '''
 
 import sys
-import os.path
+import os
 import csv
 import MySQLdb
 
     __qry_tabla_mysql += '\n) ENGINE = InnoDB '
     __qry_tabla_mysql += 'DEFAULT CHARACTER SET = utf8 '
     __qry_tabla_mysql += 'COLLATE = utf8_general_ci;\n\n'
-    __qry_insert_mysql = 'INSERT INTO `{tabla}` (`{cod_centro}`, `{tipo}`, `{cod_estado}`, `{cod_municipio}`, `{cod_parroquia}`, `{nombre_centro}`, `{direccion_centro}`, `{centro_nuevo}`) VALUES {values};\n'
+    __qry_insert_mysql = 'INSERT INTO `{tabla}` (`{cod_centro}`, `{tipo}`, `{cod_estado}`, `{cod_municipio}`, `{cod_parroquia}`, `{nombre_centro}`, `{direccion_centro}`, `{centro_nuevo}`) VALUES \n'
     __qry_insert_values_mysql = '({v1}, {v2}, {v3}, {v4}, {v5}, \'{v6}\', \'{v7}\', {v8})'
     
     def verificar(self, archivo_csv, archivo_sql):
                 csv.register_dialect('cne', delimiter=';') # estructura del CSV
                 datos_csv = csv.reader(f_csv, 'cne') # leer el CSV
                 columnas = datos_csv.next() # leer primera linea, nombres de campos
-                lineas_csv = self.__total_filas_csv(archivo_csv, datos_csv.dialect)
-                if self.__crear_tabla(columnas, archivo_sql, formato_sql):
+                if self.__crear_tabla(columnas, archivo_sql, formato_sql) == 'Centros':
                     print 'Tabla creada...'
                     print 'Llenando datos...'
                     try:
                         with open(archivo_sql, 'a+') as f_sql:
-                            valores = ''
-                            # llenar VALUES
-                            for n,fila in enumerate(datos_csv):
-                                valores += self.__qry_insert_values_mysql.format(
-                                    v1=fila[0],
-                                    v2=fila[1],
-                                    v3=fila[2],
-                                    v4=fila[3],
-                                    v5=fila[4],
-                                    v6=MySQLdb.escape_string(fila[5]),
-                                    v7=MySQLdb.escape_string(fila[6]),
-                                    v8=fila[7])
-                                if n < lineas_csv:
-                                    valores += ',\n'
-                            # unir todo
                             f_sql.write(self.__qry_insert_mysql.format(
                                 tabla = self.__nombre_tabla_centros,
                                 cod_centro = self.__columnas_centros[0],
                                 cod_parroquia = self.__columnas_centros[4],
                                 nombre_centro = self.__columnas_centros[5],
                                 direccion_centro = self.__columnas_centros[6],
-                                centro_nuevo = self.__columnas_centros[7],
-                                values=valores))
+                                centro_nuevo = self.__columnas_centros[7]))
+                            
+                            # llenar VALUES
+                            for fila in datos_csv:
+                                f_sql.write(self.__qry_insert_values_mysql.format(
+                                    v1=fila[0],
+                                    v2=fila[1],
+                                    v3=fila[2],
+                                    v4=fila[3],
+                                    v5=fila[4],
+                                    v6=MySQLdb.escape_string(fila[5]),
+                                    v7=MySQLdb.escape_string(fila[6]),
+                                    v8=fila[7]) + ',\n')
+                            
+                            # cerrar archivo SQL
+                            f_sql.close()
+                            
+                            # abrir archivo SQL de nuevo, eliminar ultima , y agregar ;
+                            with open(archivo_sql, 'a+') as f_sql:
+                                f_sql.seek(-2, os.SEEK_END)
+                                f_sql.truncate()
+                                f_sql.write(';')
                             print 'Archivo ' + archivo_sql + ' creado'
                             sys.exit(0)
                     except IOError as e:
         except IOError as e:
             print e
     
-    def __total_filas_csv(self, archivo_csv, formato):
-        try:
-            # lectura del archivo CSV
-            with open(archivo_csv, 'r') as f_csv:
-                datos_csv = csv.reader(f_csv, formato) # leer el CSV
-                datos_csv.next() # saltar nombre de columnas
-                return len(list(datos_csv))-1
-        except IOError as e:
-            print e
-    
     def __crear_tabla(self, columnas, archivo_sql, formato_sql):
         # diferenciar información de mesas y electores
         if(frozenset(sorted(self.__columnas_centros)) != frozenset(sorted(columnas))):
             print 'Verificar si son electores TO-DO'
+            return 'Electores'
         else:
             # ecribir tabla al archivo SQL
             # si es MySQL
                             nombre_centro = self.__columnas_centros[5],
                             direccion_centro = self.__columnas_centros[6],
                             centro_nuevo = self.__columnas_centros[7],))
-                        return True
                 except IOError as e:
                     print e
             # si es Postgresql
             elif formato_sql == 'postgresql':
                 print ('TO-DO')
+            # retornarn que es datos de centros
+            return 'Centros'
 
 class ErrorConvertir(Exception):
     def __init__(self, error):
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.