Ajout du programme permettant de créer la base SQLite
This commit is contained in:
parent
5f281b1511
commit
7c8ce98489
@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
### [v3.0] - 2020-06-07
|
||||||
|
- Réorganisation du code en modules
|
||||||
|
- Ajout du script permettant de créer la base de donnée SQLite
|
||||||
|
|
||||||
### [v2.0] - 2020-06-01
|
### [v2.0] - 2020-06-01
|
||||||
- Le fichier de sortie contient plus d'informations pour faciliter la comparaison (lieu de naissance)
|
- Le fichier de sortie contient plus d'informations pour faciliter la comparaison (lieu de naissance)
|
||||||
- Sortie des paramètres du code et création du fichier settings.py
|
- Sortie des paramètres du code et création du fichier settings.py
|
||||||
|
9
purge-registres-deces-insee/bdd_insee.py
Normal file → Executable file
9
purge-registres-deces-insee/bdd_insee.py
Normal file → Executable file
@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
import peewee
|
import peewee
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +8,10 @@ database = peewee.SqliteDatabase(None)
|
|||||||
class BddInsee:
|
class BddInsee:
|
||||||
|
|
||||||
def __init__(self, chemin_base_donnees):
|
def __init__(self, chemin_base_donnees):
|
||||||
|
new = not os.path.isfile(chemin_base_donnees)
|
||||||
database.init(chemin_base_donnees)
|
database.init(chemin_base_donnees)
|
||||||
|
if new:
|
||||||
|
database.create_tables([self.Person])
|
||||||
|
|
||||||
class Person(peewee.Model):
|
class Person(peewee.Model):
|
||||||
last_name = peewee.CharField()
|
last_name = peewee.CharField()
|
||||||
@ -42,3 +46,8 @@ class BddInsee:
|
|||||||
& (self.Person.jour_naissance == int(jour_naissance))
|
& (self.Person.jour_naissance == int(jour_naissance))
|
||||||
& (self.Person.first_name.contains(first_name.upper()))
|
& (self.Person.first_name.contains(first_name.upper()))
|
||||||
& (self.Person.last_name.contains(last_name.upper())))
|
& (self.Person.last_name.contains(last_name.upper())))
|
||||||
|
|
||||||
|
def import_data_list(self, data_list):
|
||||||
|
with database.atomic():
|
||||||
|
for batch in peewee.chunked(data_list, 70):
|
||||||
|
self.Person.insert_many(batch).execute()
|
||||||
|
71
purge-registres-deces-insee/completer_bdd_insee.py
Executable file
71
purge-registres-deces-insee/completer_bdd_insee.py
Executable file
@ -0,0 +1,71 @@
|
|||||||
|
"""Copyright (c) 2020 Sdj Geek
|
||||||
|
|
||||||
|
Voir le fichier LICENSE
|
||||||
|
------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Ce programme permet d'insérer les fichiers fournis par l'INSEE dans
|
||||||
|
une base de donnée SQLite.
|
||||||
|
|
||||||
|
Les fichiers fournis par l'INSEE sont disponibles en open data à
|
||||||
|
[cette
|
||||||
|
adresse](https://www.data.gouv.fr/fr/datasets/fichier-des-personnes-decedees/#_). Leur
|
||||||
|
formatage n'est pas très optimisé pour une utilisation dans un
|
||||||
|
programme. L'objet de ce programme est de transformer ces fichiers en
|
||||||
|
une base de donnée SDLite.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Auteur : SDJ GeeK <sdjgeek@protonmail.com>
|
||||||
|
Date : 7 juin 2020
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import peewee
|
||||||
|
|
||||||
|
from bdd_insee import BddInsee
|
||||||
|
|
||||||
|
|
||||||
|
def parse_insee_file(data_file_path):
|
||||||
|
data_list = []
|
||||||
|
with open(data_file_path, 'r', encoding='latin1') as data_file:
|
||||||
|
for line in data_file.readlines():
|
||||||
|
try:
|
||||||
|
last_name, first_name = line[0:80].strip()[:-1].split("*")
|
||||||
|
data_list.append({'last_name': last_name.upper(),
|
||||||
|
'first_name': first_name.upper(),
|
||||||
|
'is_woman': (line[80] == "2"),
|
||||||
|
'annee_naissance': int(line[81:85]),
|
||||||
|
'mois_naissance': int(line[85:87]),
|
||||||
|
'jour_naissance': int(line[87:89]),
|
||||||
|
'code_lieu_naissance': line[89:94].upper(),
|
||||||
|
'commune_naissance': line[94: 124].strip().upper(),
|
||||||
|
'pays_naissance': line[124: 154].strip().upper(),
|
||||||
|
'annee_deces': int(line[154:158]),
|
||||||
|
'mois_deces': int(line[158:160]),
|
||||||
|
'jour_deces': int(line[160:162]),
|
||||||
|
'code_lieu_deces': line[162:167].upper(),
|
||||||
|
'numero_act_deces': line[167:].strip().upper()})
|
||||||
|
except ValueError:
|
||||||
|
print("Erreur pour parser ligne :")
|
||||||
|
print(line)
|
||||||
|
continue
|
||||||
|
return data_list
|
||||||
|
|
||||||
|
|
||||||
|
def completer_bdd_insee(chemin_base_donnees, chemin_repertoire_donnees):
|
||||||
|
base_insee = BddInsee(chemin_base_donnees)
|
||||||
|
for file_path in sorted(glob.glob(os.path.join(chemin_repertoire_donnees, "deces-*.txt"))):
|
||||||
|
print(f"Import du fichier {file_path}")
|
||||||
|
data_list = parse_insee_file(file_path)
|
||||||
|
base_insee.import_data_list(data_list)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("bdd_path", type=str, help="Chemin vers le fichier de base de donnée")
|
||||||
|
parser.add_argument("input_dir_path", type=str, help="Chemin vers le répertoire contenant les fichiers de l'INSEE")
|
||||||
|
args = parser.parse_args()
|
||||||
|
completer_bdd_insee(args.bdd_path, args.input_dir_path)
|
Loading…
Reference in New Issue
Block a user