diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-27 18:05:32 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-27 18:05:32 +0100 |
commit | 95fa295d7d93cdb65755e66c559a792edec4f17a (patch) | |
tree | 0b45d6a11a650fbbf1a077cccf8e635305e56938 /ishtar/scripts/import_from_csv.py | |
parent | 4910b41a5689e7af239edc8fff5d9aceef9e318e (diff) | |
download | Ishtar-95fa295d7d93cdb65755e66c559a792edec4f17a.tar.bz2 Ishtar-95fa295d7d93cdb65755e66c559a792edec4f17a.zip |
Town and departement import script from CSV file - insee data for France (refs #148)
Diffstat (limited to 'ishtar/scripts/import_from_csv.py')
-rwxr-xr-x | ishtar/scripts/import_from_csv.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/ishtar/scripts/import_from_csv.py b/ishtar/scripts/import_from_csv.py new file mode 100755 index 000000000..7eb655641 --- /dev/null +++ b/ishtar/scripts/import_from_csv.py @@ -0,0 +1,68 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +Import departements and towns from csv file +""" + +DELIMITER = "," +QUOTECHAR = '"' + +import sys +import csv +sys.path.append('.') + +from django.core.management import setup_environ +import settings + +setup_environ(settings) + +from optparse import OptionParser + +from furnitures import models + +def insert_department(value): + idx, label = value + if models.Departement.objects.filter(number=idx).count(): + return + models.Departement(number=idx, label=label).save() + print idx, label, u" inserted" + +def insert_town(value): + idx, label = value + if models.Town.objects.filter(numero_insee=idx).count(): + return + try: + dpt = models.Departement.objects.get(number=idx[:2]) + except: + return + models.Town(numero_insee=idx, name=label, departement=dpt).save() + print idx, label, u" inserted" + +tables = {u"department":insert_department, + u"town":insert_town} + +usage = u"usage: %%prog csv_file.csv table_name\n\n"\ + u"Table name must be in: %s." % u", ".join(tables.keys()) +parser = OptionParser(usage=usage) + +(options, args) = parser.parse_args() + +try: + assert len(args) == 2 +except AssertionError: + parser.error(u"You must provide one csv file and the table name.") + +try: + assert args[1] in tables.keys() +except AssertionError: + parser.error(u"Incorrect table name.") + +try: + values = csv.reader(open(args[0], 'rb'), delimiter=DELIMITER, + quotechar=QUOTECHAR) +except (IOError): + parser.error(u"Incorrect CSV file.") + +for value in values: + tables[args[1]](value) |