diff -r 00fc169cc6a9 -r 825ff4d6a8ac src/hdalab/management/commands/import_insee_csv.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hdalab/management/commands/import_insee_csv.py Mon Jun 16 17:11:32 2014 +0200 @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +''' +@author: raphv +''' +from django.core.management.base import BaseCommand, CommandError +import django.utils.simplejson as json +from SPARQLWrapper import SPARQLWrapper, JSON +from hdalab.models import InseeCoords +import csv +import re +import sys + +class Command(BaseCommand): + ''' + Command to export tags + ''' + args = '' + options = '' + help = """Imports Insee codes and geographic coordinates from a csv file""" + + def handle(self, *args, **options): + + if len(args) == 0 or not args[0]: + raise CommandError("Give a CSV File to import") + + filename = args[0] + + csvfile = open(filename, "rb") + dialect = csv.Sniffer().sniff(csvfile.read(1024)) + csvfile.seek(0) + reader = csv.reader(csvfile, dialect) + fieldstoget = [ 'ville', 'insee', 'latitude', 'longitude' ] + + for i,line in enumerate(reader): + if i == 0: + fields = {} + minlength = 0 + for j,field in enumerate(line): + for fieldname in fieldstoget: + if re.search('(?i)%s' % fieldname, field): + fields[fieldname] = j + minlength = max(j,minlength) + else: + if len(line) > minlength: + rawdata = {k: line[v].strip() for k,v in fields.iteritems()} + #print "Processing line %d" % i + #print rawdata + try: + latitude = float(rawdata['latitude'].replace(',','.')) + longitude = float(rawdata['longitude'].replace(',','.')) if rawdata['longitude'] != '-' else 0 + insee = int(rawdata['insee']) + ville = unicode(rawdata['ville'], 'iso-8859-1') + + InseeCoords.objects.get_or_create(insee=insee, city_name=ville, latitude=latitude, longitude=longitude) + + except: + print line, "Error :", sys.exc_info()[1] + + csvfile.close() \ No newline at end of file