Skip to content

Instantly share code, notes, and snippets.

@Magicking
Created June 12, 2017 11:59
Show Gist options
  • Save Magicking/7fad6c850c2132d246140d05a27fdebd to your computer and use it in GitHub Desktop.
Save Magicking/7fad6c850c2132d246140d05a27fdebd to your computer and use it in GitHub Desktop.
Liste des candidats ayant eu 0 voix
Dep Alpes-Maritimes (006 - 3) - ASIN Didier
Dep Ardèche (007 - 2) - VALLON Jean-Paul Louis
Dep Aude (011 - 2) - DEBONO Aurore
Dep Bouches-du-Rhône (013 - 1) - RADY Souaad
Dep Bouches-du-Rhône (013 - 1) - ABDALLAH Fouad
Dep Bouches-du-Rhône (013 - 2) - PERETTI Sébastien
Dep Bouches-du-Rhône (013 - 3) - MASSE Christophe
Dep Bouches-du-Rhône (013 - 4) - BOUDOUAYA Selma
Dep Bouches-du-Rhône (013 - 5) - ZIEBA Pierre-Frédéric
Dep Bouches-du-Rhône (013 - 6) - LABIBES Abdel
Dep Bouches-du-Rhône (013 - 10) - MINARI Nathalie
Dep Corse-du-Sud (02A - 1) - COMITI Jean-Jacques
Dep Côte-d'Or (021 - 3) - MAITROT Lucas
Dep Creuse (023 - 1) - MOUNIER Michèle
Dep Dordogne (024 - 4) - GORISSE Edwige
Dep Drôme (026 - 4) - MANA Nadia
Dep Eure-et-Loir (028 - 1) - CAILLOL Valérie
Dep Gard (030 - 2) - BROADBENT Timothy
Dep Gard (030 - 5) - CHEVALIER Patrick
Dep Ille-et-Vilaine (035 - 2) - HARDY Guillaume
Dep Ille-et-Vilaine (035 - 6) - VEDRENNE Marie-Pierre
Dep Indre-et-Loire (037 - 4) - POLIER Pierre
Dep Indre-et-Loire (037 - 5) - VALLÉE Patrice
Dep Isère (038 - 4) - AUGIER Bernard
Dep Isère (038 - 10) - BOURICHA Nourredine
Dep Jura (039 - 1) - LAPIERRE Michel
Dep Loire (042 - 1) - PLACE Bénédicte
Dep Loire (042 - 4) - THOMAS Pascal
Dep Loire (042 - 4) - SHEMATSI François
Dep Haute-Loire (043 - 1) - DENIS Hélène
Dep Loire-Atlantique (044 - 2) - DUMONTET-TARRIUS Béatrice
Dep Loire-Atlantique (044 - 8) - TARRIUS Catherine
Dep Loiret (045 - 1) - BONFORT Claire
Dep Loiret (045 - 2) - VALIX Maurice
Dep Loiret (045 - 5) - MOURY Nathalie
Dep Loiret (045 - 5) - BRUNETTE Denis
Dep Loiret (045 - 5) - DAIRE Cécile
Dep Marne (051 - 1) - MAYA-PÉREZ Julien
Dep Mayenne (053 - 3) - BRESARD Bernadette
Dep Meurthe-et-Moselle (054 - 2) - GNIADEK Julien
Dep Moselle (057 - 4) - GERDIL Lise
Dep Moselle (057 - 6) - HALLIER Marjolaine
Dep Moselle (057 - 8) - KIFFER Camille
Dep Moselle (057 - 9) - SANDER Yan
Dep Nord (059 - 1) - RODRIGUEZ Pierre
Dep Nord (059 - 1) - RAMBERT Valentine
Dep Nord (059 - 1) - ÉTIENNE Stéphane
Dep Nord (059 - 1) - DE CESARE Virginie
Dep Nord (059 - 8) - DA COSTA Luis
Dep Puy-de-Dôme (063 - 1) - POURCHON Alexandre
Dep Hautes-Pyrénées (065 - 1) - GIRON Thierry
Dep Haut-Rhin (068 - 2) - MOERMAN Dylan
Dep Rhône (069 - 2) - KROUBI Kamel
Dep Rhône (069 - 3) - NICOLAÏ Lérie
Dep Rhône (069 - 7) - BERGE Constance
Dep Rhône (069 - 13) - BLÉHAUT Athénaïs
Dep Rhône (069 - 14) - BEN KHELIFA Lotfi
Dep Savoie (073 - 3) - PONS Henriette
Dep Paris (075 - 2) - PUYOOU Annick
Dep Paris (075 - 2) - DE PREVAL David
Dep Paris (075 - 5) - HAYEK Alexandre
Dep Paris (075 - 6) - AGON Christian
Dep Paris (075 - 14) - HARCHAOUI Sarah
Dep Paris (075 - 14) - STEPHANT Kenza
Dep Paris (075 - 15) - CASTILLON Florence
Dep Paris (075 - 16) - DESCOUTURES Anne
Dep Paris (075 - 16) - DEBANNE Emmanuel
Dep Paris (075 - 18) - ARENAS Carla
Dep Seine-Maritime (076 - 1) - GIRARD Mathias
Dep Seine-Maritime (076 - 3) - HUET DE BARROS Nicolas
Dep Seine-Maritime (076 - 4) - DEDJI Noël
Dep Seine-et-Marne (077 - 8) - ROMET Frédéric
Dep Yvelines (078 - 5) - CASTILLON Adeline
Dep Tarn (081 - 2) - LENIE Marina
Dep Var (083 - 1) - DRIQUEZ Viviane
Dep Var (083 - 4) - CAMOUS Martine
Dep Vaucluse (084 - 3) - MAIRE Philippe
Dep Vendée (085 - 1) - NORYNBERG Didier
Dep Territoire de Belfort (090 - 1) - LAGACHE Romain
Dep Essonne (091 - 1) - SABATTIER Jacqueline
Dep Essonne (091 - 4) - RAVILLARD Coraline
Dep Essonne (091 - 9) - PENDANT David
Dep Seine-Saint-Denis (093 - 2) - NINI Nadir
Dep Seine-Saint-Denis (093 - 2) - SCEKIC Vesna
Dep Seine-Saint-Denis (093 - 2) - HOCINI Abdel
Dep Val-de-Marne (094 - 4) - BRAS Hélène
Dep Val-de-Marne (094 - 7) - OLLIÉ Anaïs
Dep Val-de-Marne (094 - 8) - LEISEING Patrick
Dep Val-de-Marne (094 - 9) - BELARBI Drifa
Dep Val-de-Marne (094 - 10) - MAKANGILA-LEBO Clémentine
Dep Val-d'Oise (095 - 1) - BRUYELLE Rudy
Dep Val-d'Oise (095 - 1) - VUILLEMIN Anne-Sophie
Dep Guadeloupe (971 - 3) - MADACHON Eric
Dep Guadeloupe (971 - 4) - NWETPOUNGAM Valerie
Dep Français établis hors de France (099 - 1) - TOPLA Balie
Dep Français établis hors de France (099 - 2) - SIMONNET Odette
Dep Français établis hors de France (099 - 2) - MILLET Mickaël
Dep Français établis hors de France (099 - 2) - LAHANA Stéphanie
Dep Français établis hors de France (099 - 5) - TEYSSOU Chloé
Dep Français établis hors de France (099 - 9) - MASSIANI Yves-Eric
# Bibliothèque permettant la manipulation d'XML *facilement*
# http://lxml.de/xpathxslt.html#the-xpath-method
from lxml import etree
# Bibliothèque pour des requetes HTTP facile
# http://docs.python-requests.org/en/master/)
import requests
# Bibliothèque pour le chargement / déchargement d'objet
# https://wiki.python.org/moin/UsingPickle
import pickle
# Accès à l'environnement système (paramètre de la ligne de commande)
# https://docs.python.org/3/library/sys.html#sys.argv
import sys
# Python package requis:
# - requests
# - lxml
# Très peu optimisé, ce script prend beaucoup de mémoire (~2.5Go)
# Point d'entrée de la hiérarchie des documents XML
entry_url = 'http://elections.interieur.gouv.fr/telechargements/LG2017/resultatsT1/'
# On s'occupe de récupérer les départements
def getDpts():
# On récupère la liste des départements
page = requests.get(entry_url + 'index.xml')
# On convertie le texte reçu en une structure XML
tree = etree.fromstring(page.content)
# On récupère les attributes Code de Département sur 3
# Caractères (CodDpt3Car) et le libéllé du Département (LibDpt)
# On utilise une requête XPath (voir lien lxml ci-dessus) qui
# s'occupe de cherche dans l'arbre XML ces éléments
listDpts_num = tree.xpath('//Election/Departements/Departement/CodDpt3Car/text()')
listDpts_name = tree.xpath('//Election/Departements/Departement/LibDpt/text()')
# On lie les deux éléments au moyen d'une "fermeture éclair" (zipper)
listDpts = zip(listDpts_num, listDpts_name)
Dpt = []
# Pour chaque département(numéro et nom)
for num, name in listDpts:
# On récupère les candidats
circonscription = 1
while True:
# Pour chaque circonscription sur 2 chiffres
cs, ok = getCandidats(num, '%02d' % circonscription)
if not ok:
break
# On ajouter un dictionnaire de candidats par circonscription
Dpt.append({'name': name, 'num': num, 'cir': circonscription, 'candidats': list(cs)})
circonscription += 1
# On retourne la liste des départements
return Dpt
def getCandidats(num, cirnum):
# On choisi les données que l'on souhaite voir
# NumPanneauCand: Numéro de panneau du candidat
# NomPsn: Nom du candidat
# PrenomPsn: Prénom du candidat
# CivilitePsn: Civilité du candidat (M Mme)
# CodNua: Code nuance du candidat
# LibNua: Libellé de la nuance du candidat
# Source: Page 12, http://www.tarn.gouv.fr/IMG/pdf/elections_legislatives_2017_-_guide_pour_le_telechargement_des_resultats_xml.pdf
# Ici: NomPsn, PrenomPsn, NbVoix
candidats_chars = ['NomPsn', 'PrenomPsn', 'NbVoix'] # (Nom - 0, Prenom - 1, NbVoix* - 2)
# On récupère les résultats de toutes les circonscriptions du département
page = requests.get(entry_url + num + '/' + num + cirnum + '.xml')
if page.status_code != 200:
return None, False
# On convertit le texte reçu en une structure XML
tree = etree.fromstring(page.content)
cs = {}
# Pour toutes les données
for char in candidats_chars:
# On effectue une requête XPath pour chaque attribut du candidat
cs[char] = tree.xpath('//Election/Departement/Circonscription/Tours/Tour/Resultats/Candidats/Candidat/%s/text()' % char)
# On noue et retourne ensemble chaque triplet d'information d'un candidat
return zip(cs['NomPsn'], cs['PrenomPsn'], cs['NbVoix']), True
if __name__ == '__main__':
if len(sys.argv) == 2 and sys.argv[1] == 'load':
# En cas de passage de "load" comme argument, il essayera de charger les
# résultats depuis un fichier local
dpt = pickle.load(open('legislatives-2017.p', 'rb'))
else:
# Sinon, il en créera un
dpt = getDpts()
pickle.dump(dpt, open('legislatives-2017.p', 'wb'))
# Pour tout les départements
for d in dpt:
# Pour tout les candidats
for c in d['candidats']:
# Si le NbVoix* est à '0'
if c[2] == '0':
# Affiche le département, son numéro et sa circonscription ainsi que le nom et prénom du candidat
print('Dep %s (%s - %s) - %s %s' % (d['name'], d['num'], d['cir'], c[0], c[1]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment