OpenData
L’OpenData c’est vraiment bien parce qu’on peut faire des choses fun. Et ce soir j’ai appris qu’il est possible d’obtenir des données de la Poste. Génial! Mais après avoir vu l’aspect du fichier mis à disposition, j’ai presque pleuré. Alors j’ai décidé de faire un petit script qui me sera utile.
#! /usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import csv
import urllib2
from contextlib import contextmanager
POSTAL_CODES = "https://www.data.gouv.fr/s/resources/base-officielle-des-codes-postaux/20141106-120608/code_postaux_v201410.csv"
@contextmanager
def open_url(url):
try:
f = urllib2.urlopen(url)
except IOError as err:
yield None, err
else:
try:
yield f, None
finally:
f.close()
def usage():
print "This script takes one argument."
print "Usage:"
print "\tpcodes.py city"
exit(1)
if __name__ == "__main__":
# Point of entry in execution mode.
if len(sys.argv) != 2:
usage()
city = sys.argv[1]
with open_url(POSTAL_CODES) as (postal_codes, err):
if err:
print err
else:
dialect = csv.Sniffer().sniff(postal_codes.read(1024))
rows = csv.reader(postal_codes, dialect)
result = sorted([(row[1], row[2]) for row in rows
if city.lower() in row[1].lower()],
key=lambda x: x[0])
print "\n".join([value + " " + key for key, value in result])
Utilisation:
$ ./pcodes.py grosblie
57520 GROSBLIEDERSTROFF
J’avais trouvé d’autres scripts pour faire ça. Mais souvent au bout d’un certain temps, ils ne fonctionnent plus (disparation de la ressource Web, généralement). Espérons que celui-ci fonctionnera longtemps.