Initial commit

This commit is contained in:
jerem
2026-06-13 13:32:38 +02:00
commit 528d994ea8
9 changed files with 1003 additions and 0 deletions

57
departements.py Normal file
View File

@@ -0,0 +1,57 @@
"""Table des départements français et résolution depuis un code postal."""
DEPARTEMENTS = {
"01": "Ain", "02": "Aisne", "03": "Allier", "04": "Alpes-de-Haute-Provence",
"05": "Hautes-Alpes", "06": "Alpes-Maritimes", "07": "Ardèche", "08": "Ardennes",
"09": "Ariège", "10": "Aube", "11": "Aude", "12": "Aveyron",
"13": "Bouches-du-Rhône", "14": "Calvados", "15": "Cantal", "16": "Charente",
"17": "Charente-Maritime", "18": "Cher", "19": "Corrèze",
"2A": "Corse-du-Sud", "2B": "Haute-Corse",
"21": "Côte-d'Or", "22": "Côtes-d'Armor", "23": "Creuse", "24": "Dordogne",
"25": "Doubs", "26": "Drôme", "27": "Eure", "28": "Eure-et-Loir",
"29": "Finistère", "30": "Gard", "31": "Haute-Garonne", "32": "Gers",
"33": "Gironde", "34": "Hérault", "35": "Ille-et-Vilaine", "36": "Indre",
"37": "Indre-et-Loire", "38": "Isère", "39": "Jura", "40": "Landes",
"41": "Loir-et-Cher", "42": "Loire", "43": "Haute-Loire", "44": "Loire-Atlantique",
"45": "Loiret", "46": "Lot", "47": "Lot-et-Garonne", "48": "Lozère",
"49": "Maine-et-Loire", "50": "Manche", "51": "Marne", "52": "Haute-Marne",
"53": "Mayenne", "54": "Meurthe-et-Moselle", "55": "Meuse", "56": "Morbihan",
"57": "Moselle", "58": "Nièvre", "59": "Nord", "60": "Oise",
"61": "Orne", "62": "Pas-de-Calais", "63": "Puy-de-Dôme",
"64": "Pyrénées-Atlantiques", "65": "Hautes-Pyrénées", "66": "Pyrénées-Orientales",
"67": "Bas-Rhin", "68": "Haut-Rhin", "69": "Rhône", "70": "Haute-Saône",
"71": "Saône-et-Loire", "72": "Sarthe", "73": "Savoie", "74": "Haute-Savoie",
"75": "Paris", "76": "Seine-Maritime", "77": "Seine-et-Marne", "78": "Yvelines",
"79": "Deux-Sèvres", "80": "Somme", "81": "Tarn", "82": "Tarn-et-Garonne",
"83": "Var", "84": "Vaucluse", "85": "Vendée", "86": "Vienne",
"87": "Haute-Vienne", "88": "Vosges", "89": "Yonne", "90": "Territoire de Belfort",
"91": "Essonne", "92": "Hauts-de-Seine", "93": "Seine-Saint-Denis",
"94": "Val-de-Marne", "95": "Val-d'Oise",
"971": "Guadeloupe", "972": "Martinique", "973": "Guyane",
"974": "La Réunion", "976": "Mayotte",
}
def departement_depuis_cp(cp):
"""Retourne « NN - Nom » depuis un code postal à 5 chiffres, ou ""."""
cp = (cp or "").strip()
if len(cp) != 5 or not cp.isdigit():
return ""
if cp.startswith("97"):
cle = cp[:3]
elif cp.startswith("20"):
# Corse : 20000-20199 → Corse-du-Sud, 20200-20699 → Haute-Corse (approximation usuelle)
cle = "2A" if int(cp) < 20200 else "2B"
else:
cle = cp[:2]
nom = DEPARTEMENTS.get(cle)
return f"{cle} - {nom}" if nom else ""
if __name__ == "__main__":
for cp, attendu in [("29200", "29 - Finistère"), ("20090", "2A - Corse-du-Sud"),
("20600", "2B - Haute-Corse"), ("97400", "974 - La Réunion"),
("75011", "75 - Paris"), ("00000", ""), ("abc", "")]:
resultat = departement_depuis_cp(cp)
statut = "OK" if resultat == attendu else f"ECHEC (attendu {attendu!r})"
print(f"{cp} -> {resultat!r} {statut}")