Générer des noms et prénoms de manières aléatoires à l’aide de Python est une chose dont j’avais besoin. En effet, je voulais remplir une base de données afin de voir si mon nouveau site Les vrais profs fonctionnait. Vous savez, le site de mise en relation gratuite entre Elèves/parents et profs qui donnent des cours particuliers ? C’est nouveau, mais comme je ne suis pas un expert en communication, il a du mal à être connu… Il me fallait donc remplir artificiellement la base de données avec des entités fictives.
Noms et prénoms aléatoires avec Python: la préparation
Téléchargement des noms et prénoms pour un choix aléatoire en Python
Je veux générer des prénoms qui existent, mais aussi des noms de famille qui existent. Pour cela, il me fallait des fichiers contenant tous les prénoms et noms de famille de France.
Je suis donc aller sur:
- https://www.data.gouv.fr/fr/datasets/prenoms-declares/ pour obtenir la liste de tous les prénoms;
- https://www.insee.fr/fr/statistiques/3536630 pour avoir celle de tous les noms de famille;
- https://www.data.gouv.fr/fr/datasets/villes-de-france/ pour télécharger la liste de toutes les villes de France.
Oui, en effet, il me fallait aussi la liste de toutes les villes car pour s’inscrire, il faut renseigner un code postal et une ville… C’est un peu logique quand on veux donner des cours particuliers; même si on ne donne que des cours par webcam, comme c’est mon cas, c’est toujours bien d’informer l’endroit où l’on réside.
Modifications des fichiers des noms et prénoms pour un choix aléatoire en Python
Ces fichiers sont au format CSV, et possèdent donc une première ligne inutile pour le traitement auquel je les destine. Par exemple, le fichier des prénoms commence par:
nombre;sexe;annee;prenoms;nombre_total_cumule
46;M;2011;Yacine;46
60;M;2011;Youssef;60
Il suffit juste de supprimer la première ligne. Idem pour les autres fichiers.
Noms et prénoms aléatoires avec Python: le traitement
L’objectif est de construire une requête SQL qui insert n entrées dans ma base de données. Il faut donc savoir la structure de la table. Je vais passer sur la réelle structure de ma table, et vais considérer qu’elle est de la forme:
(id,nom,prenom,codepostal,ville)
Les listes
prenoms_file = open('prenoms.csv' , 'r', encoding = 'utf8') prenoms_liste = [ ligne.split(';')[3].upper() for ligne in prenoms_file]
On commence par ouvrir le fichier en mode lecture (‘r’ = read), puis on construit par compréhension la liste des prénoms. C’est une manière de faire que j’affectionne car c’est concis (1 ligne).
Explications: la boucle “for i in prenoms_file” parcours chaque ligne du fichier. Sur chaque ligne, comme vu précédemment, il y a des informations séparées par un “;” à chaque fois. Je convertis donc cette ligne en liste à l’aide de la méthode split(‘;’) et je prends uniquement le 4ème item (d’où le [3]). Ensuite, à l’aide de la méthode upper(), je convertis en majuscules pour harmoniser tous les résultats.
Je fais de même avec les noms de famille et les villes:
noms_file = open('noms.csv' , 'r', encoding = 'utf8') noms_liste = [ ligne.split(',')[0].upper() for ligne in noms_file] villes_file = open('villes.csv' , 'r', encoding = 'utf8') villes_liste = [ (ligne.split(',')[1].upper() , ligne.split(',')[2]) for ligne in sorted(villes_file)]
La requête SQL
requete_sql = '' table_name = 'matable' for _ in range(200): requete_sql += 'INSERT INTO ' + table_name + ' (nom, prenom, codepostal, ville) VALUES (\''+choice(noms_liste)+'\', \''+choice(prenoms_liste)+'\', \''+choice(villes_liste)[1]+'\', \''+choice(villes_liste)[0]+'\');\n'
Et voilà! Une petite requête d’insertion de 200 entrées.