Código de Python - Exportar los archivos de GeoLite países y ciudades a MySQL

Imágen de perfil

Exportar los archivos de GeoLite países y ciudades a MySQLgráfica de visualizaciones


Python

Actualizado el 12 de Julio del 2013 por Xavi (Creado el 11 de Julio del 2013)
5.924 visualizaciones desde el 11 de Julio del 2013. Una media de 35 por semana
Código que exporta el contenido de los archivos GeoIPCountryWhois.csv y GeoLiteCity-Location.csv a MySQL para disponer de todos los países vinculados a sus ciudades.

Puedes descargar estos archivos de:
http://dev.maxmind.com/geoip/legacy/geolite/

- GeoLite Country CSV/Zip
http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

- GeoLite City CSV/Zip
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip

Versión 1

Actualizado el 12 de Julio del 2013 (Creado el 11 de Julio del 2013)gráfica de visualizaciones de la versión: Versión 1
5.925 visualizaciones desde el 11 de Julio del 2013. Una media de 35 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
"""
Este script, exporta la base de datos de GeoLite de paises y ciudades
a base de datos mysql

Descargar la base de datos de:
http://dev.maxmind.com/geoip/legacy/geolite/
    - GeoLite Country CSV/Zip
        http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
    - GeoLite City CSV/Zip
        http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip

Tienen que existis la base de datos `world` con las tablas:
CREATE TABLE IF NOT EXISTS `Paises` (
  `Codigo` varchar(2) NOT NULL,
  `Pais` varchar(100) NOT NULL,
  PRIMARY KEY (`Codigo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `Ciudades` (
  `idCiudades` int not null auto_increment,
  `Paises_Codigo` varchar(2) NOT NULL,
  `Ciudad` varchar(100) NOT NULL,
  PRIMARY KEY (`idCiudades`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `Ciudades` ADD index `Paises_Codigo`(`Paises_Codigo`);
ALTER TABLE `Ciudades` ADD index `Ciudad`(`Ciudad`);
"""
 
import sys
import _mysql
import MySQLdb
 
# informacion de la base de datos
host="localhost"
user="all"
pw="all"
port=3306
database="world"
 
 
# conectamos con la base de datos
try:
    db=_mysql.connect(host=host,user=user,passwd=pw,port=port,db=database)
except (_mysql.DatabaseError,_mysql.DataError,_mysql.Error,_mysql.IntegrityError,_mysql.InterfaceError,_mysql.InternalError,_mysql.MySQLError,_mysql.NotSupportedError,_mysql.OperationalError),e:
    print "Error: %s - %s" % (e[0],e[1])
    sys.exit()
except:
    print "Error desconocido"
    sys.exit()
 
 
# exportamos los paises
f=file("GeoIPCountryWhois.csv", "r")
db.query("DELETE FROM Paises")
db.query("ALTER TABLE Paises AUTO_INCREMENT = 0")
count=0
# hacemos un bucle hasta final de archivo
for line in f.read().splitlines():
    values=line.split(",")
    # unicamente guardaremos el codigo del pais y su nombre
    sql='INSERT INTO Paises VALUES ("%s", "%s")' % (values[4][1:-1], values[5][1:-1])
    try:
        db.query(sql)
        count+=1
    except:
        # cada vez que haya un registro repetido dara un error, ya
        # que el campo Codigo es una clave primaria
        pass
f.close()
print "se han añadido %s paises" % count
 
 
# exportamos las ciudades
f=file("GeoLiteCity-Location.csv", "r")
db.query("DELETE FROM Ciudades")
db.query("ALTER TABLE Ciudades AUTO_INCREMENT = 0")
count=0
lines=0
# hacemos un bucle hasta final de archivo
for line in f.read().splitlines():
    values=line.split(",")
    lines+=1
    # empezamos a partir de la tercera linea,. ya que las dos primeras
    # lineas contienen comentarios
    if lines>2 and values[3][1:-1]:
        # revisamos que no exista ya en la base de datos
        sql='SELECT idCiudades FROM Ciudades WHERE Paises_Codigo="%s" AND Ciudad="%s"' % (values[1][1:-1], values[3][1:-1])
        db.query(sql)
        if not db.store_result().fetch_row():
            count+=1
            sql='INSERT INTO Ciudades (Paises_Codigo,Ciudad) VALUES ("%s", "%s")' % (values[1][1:-1], values[3][1:-1])
            db.query(sql)
f.close()
 
print "se han añadido %s ciudades" % count



Comentarios sobre la versión: Versión 1 (0)


No hay comentarios
 

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s2426