Bonjour à toutes et tous,

Je viens vers vous pour m'aider à améliorer le code que j'ai écrit, car actuellement, c'est extrêmement long.
Je suis développeur, mais très débutant en Python.

Principe :
A partir de deux fichiers .csv, je souhaite générer une fichier GEDCOM
Le premier fichier contient des données de personnes, j'ai environ 35 fichiers, un par année qui ont chacun, environ 400 000 lignes.
Le second fichier, est une fichier .csv, de correspondance entre un code ville INSEE et le détail pour ce code INSEE, ce fichier à environ 36 000 lignes.

Exemple de fichier (Année 1971)
Fichier 1:
"nomprenom";"sexe";"datenaiss";"lieunaiss";"commnaiss";"paysnaiss";"datedeces";"lieudeces";"actedeces"
"PACCARD*JEAN/";"1";"19001211";"01001";"L'ABERGEMENT-CLEMENCIAT";"";"19711021";"01093";"42"
"PERRUCHET*JOANNY/";"1";"19050808";"01001";"L'ABERGEMENT-CLEMENCIAT";"";"19710310";"71270";"132"
"RIGAUD*JEANNE MARIE/";"2";"19080805";"01001";"L'ABERGEMENT-CLEMENCIAT";"";"19710218";"01446";"1"
"GUICHARD*ANTOINETTE/";"2";"19130426";"01001";"L'ABERGEMENT-CLEMENCIAT";"";"19710523";"01028";"3"
"BOUCHY*JEAN CLAUDE/";"1";"18940930";"01001";"L'ABERGEMENT-CLEMENCIAT";"";"19710218";"69384";"92"
"GAUTHIER*MICHEL/";"1";"18990922";"01001";"L'ABERGEMENT-CLEMENCIAT";"";"19710723";"01028";"5"
Fichier 2
insee;cPostam;Commune;dep;reg
1001;1400;L'ABERGEMENT-CLEMENCIAT;AIN;RHONE-ALPES
1002;1640;L'ABERGEMENT-DE-VAREY;AIN;RHONE-ALPES
1004;1500;AMBERIEU-EN-BUGEY;AIN;RHONE-ALPES
1005;1330;AMBERIEUX-EN-DOMBES;AIN;RHONE-ALPES
1006;1300;AMBLEON;AIN;RHONE-ALPES
1007;1500;AMBRONAY;AIN;RHONE-ALPES
Le code Python que j'ai créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import os
 
Nom = Prenom = Sexe = DateNaissance = DateDeces = VilleN = DepN = RegionN = VilleD = DepD = RegionD = ""
mon_fichier = ""
 
os.system("cls")
 
def chercheVille(Code, Type):
    comm = open('commune.csv', "r")
    leCode = Code[1:len(Code)-1]
    # utilisez readline() pour lire la première ligne
    maComm = comm.readline()
    while maComm:
        laLigneComm = maComm.split(";")
        if (len(laLigneComm[0]) == 4):
            valActuelle = "0" + laLigneComm[0]
        else:
            valActuelle = laLigneComm[0]
        if(valActuelle == leCode):
            if(Type == "N"):
                global VilleN, DepN, RegionN
                VilleN = laLigneComm[2]
                DepN = laLigneComm[3]
                RegionN = laLigneComm[4]
            else:
                global VilleD, DepD, RegionD
                VilleD = laLigneComm[2]
                DepD = laLigneComm[3]
                RegionD = laLigneComm[4]             
        maComm = comm.readline()
    comm.close
 
def analyseIdentite(Valeur):
    global Nom, Prenom
    Nom = Valeur[1:Valeur.find("*")]
    Prenom = Valeur[Valeur.find("*")+1:Valeur.find("/")]
 
def analyseSexe(Valeur):
    global Sexe
    if ("1" in Valeur):
        Sexe = "M"
    else:
        Sexe = "F"
 
def analyseDate(Valeur, Type):
    global DateNaissance, DateDeces
    annee = Valeur[1:5]
    mois = Valeur[5:7]
    if ("01" in mois):
        mois="JAN"
    elif ("02" in mois):
        mois="FEB"
    elif ("03" in mois):
        mois="MAR"
    elif ("04" in mois):
        mois="APR"
    elif ("05" in mois):
        mois="MAY"
    elif ("06" in mois):
        mois="JUN"
    elif ("07" in mois):
        mois="JUI"
    elif ("08" in mois):
        mois="AUG"
    elif ("09" in mois):
        mois="SEP"
    elif ("10" in mois):
        mois="OCT"
    elif ("11" in mois):
        mois="NOV"
    elif ("12" in mois):
        mois="DEC"
    jour = Valeur[7:9]
    if (Type == "N"):
        DateNaissance = jour + " " + mois + " " + annee
    else:
        DateDeces = jour + " " + mois + " " + annee
 
# Ouvrir le fichier en lecture seule
file = open('deces-1972.csv', "r")
# utilisez readline() pour lire la première ligne
line = file.readline()
AncN = AncD = ""
 
mon_fichier = open("import-1972.ged", "w")
mon_fichier.write("0 HEAD\n")
mon_fichier.write("1 DEST ANY\n")
mon_fichier.write("1 CHAR UTF-8\n")
mon_fichier.close
i = 1
while line:
    os.system("cls")
    print(i)
    if (line.find("*") >= 0):
        maLigne = line.split(";")
        analyseIdentite(maLigne[0])
        analyseSexe(maLigne[1])
        analyseDate(maLigne[2], "N")
        if (maLigne[3] != AncN):
            chercheVille(maLigne[3], "N")
            AncN = maLigne[3]
        analyseDate(maLigne[6], "D")
        if(maLigne[7] != AncD):
            chercheVille(maLigne[7], "D")
            AncD = maLigne[7]
 
        mon_fichier = open("import-1972.ged", "a")
        mon_fichier.write("0 @I%i@ INDI\n" % i)
        mon_fichier.write("1 NAME " + Prenom + "/" + Nom + "/\n")
        mon_fichier.write("1 SEX %s\n" % Sexe)
        mon_fichier.write("1 BIRT\n")
        mon_fichier.write("2 DATE %s\n" % DateNaissance)
        mon_fichier.write("2 PLAC " + VilleN + "," + DepN + "," + RegionN)
        mon_fichier.write("2 SOUR @S1@\n")
 
        mon_fichier.write("1 DEAT\n")
        mon_fichier.write("2 DATE %s\n" % DateDeces)
        mon_fichier.write("2 PLAC " + VilleD + "," + DepD + "," + RegionD)
        mon_fichier.write("2 SOUR @S1@\n")
        mon_fichier.write("0 @S1@ SOUR\n")
        mon_fichier.write("1 TITL Registre de l'INSEE\n")
        mon_fichier.close
        i = i + 1
    line = file.readline()
file.close()
mon_fichier = open("import-1972.ged", "a")
mon_fichier.write("0 TRLR\n")
mon_fichier.close
Ceci fonctionne, mais, comme je le disais, c'est très long, pour l'analyse de 1 000 lignes du fichier 1, cela prend environ 35 secondes, soit plus de 2h30 par fichier de base, comme j'en ai environ 35, je vous laisse calculer.

Si vous pouvez m'apporter votre aider pour améliorer mon code, ce serait formidable.

Merci d'avance et au plaisir de vous lire.