bonjour à vous,
je ne vois pas trop dans quelle rubrique poser ma question, alors ici où là?
lol
voilà la chose:
j'ai fait un module comme suit:
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
 
import csv
 
str_bidon= '&' #limites de cellules
str_alias= '@' #pour les faute d'orthographe
class DictCsv:
    """
    gestion de données de fichier csv par dictionnaire
    la 1ère ligne du fichier contient les titres des colonnes
    la 1ère colonne contient les clés (uniques)
    les autres colonnes sont les valeurs retournées sous forme de liste
    récupération des noms mal orthographiés:
    la clé est précédée d'"@" et la valeur porte le nom correct
    """
 
    titre= []
    liste= {}
    def __init__(self):
        titre= []
        liste= {}
 
    def chargedict(self, fichier):
 
        fichin= csv.reader(open(fichier), dialect='excel',\
                delimiter=' ', quotechar='|', quoting= csv.QUOTE_MINIMAL)
 
        D= []
        for idx in fichin:
            l= " ".join(idx)              # on zappe "['" et "'])
            l= l.replace('"', '') # on zappe les '"' de la ligne
            l= l.split(',') #on découpe la chaine en x mots en zappant les ","
            if l[0]== "":
                break
            D.append(l)
        self.titre= D[0]
        #print(self.titre)
        del D[0]
        del self.titre[0]    # contient "commune"
 
        for idx in D:
            self.liste[normalise(idx[0])]= idx[1:]
 
    def ligne_titres(self):
        ligne= [str_bidon, 'commune']
        for idx in range(len(self.titre)):
            ligne.append(self.titre[idx])
        ligne.append(str_bidon)
        return(','.join(ligne))
 
    def ligne_dico(self, idx):
        ligne= [str_bidon]
        ligne.append(idx)
        L= self.liste[idx]
        for i in range(len(L)):
            ligne.append(L[i])
        ligne.append(str_bidon)
        #print(ligne)
        return(','.join(ligne))
 
    def sauvedict(self, fichier):
        fichout= csv.writer(open(fichier, 'w'), dialect='excel', delimiter=' ',\
                quotechar= '|', lineterminator= "\n", quoting= csv.QUOTE_MINIMAL)
 
        fichout.writerow([self.ligne_titres()])
 
        for idx in self.liste:
            fichout.writerow([self.ligne_dico(idx)])
 
    def cherche_liste(self, nom):
        try:
            L=self.liste[nom]
        except:
            nom= str_alias + nom
            try:
                L=self.liste[nom]
                if L== []:
                    return []
                alias= L[0]
                L=self.liste[normalise(alias)]
                return L
            except:
                L= []
            L= []
        return L
 
    def replace_liste(self, nom, nelleliste):
        try:
            self.D[nom]= nelleliste
        except:
            return
 
import re
 
patternes_invariants= [
        ['[à|â|ä|à]', 'a'],
        ['[é|è|ê|ë]', 'e'],
        ['î|ï]', 'i'],
        ['[ô|ö]', 'o'],
        ['[ù|û|ü]', 'u'],
        [r'\bvx\b', 'vieux'],
        [r'\bs/s\b', 'sous'],
        ['s/', 'sur'] #ici pas de car d'echapement
        ]
 
patternes_variants= [
        [r'\bste?s?\b', 'st', 'saint'],
        [r'\bhte?s?\b', 'ht', 'haut'],
        [r'\bgde?s?\b', 'gd', 'grand'],
        [r'\bptes?\b', 'pte', 'porte'],
        [r'\bmts?\b', 'mt', 'mont'],
        [r'\bchtx?\b', 'cht', 'chateau']
        ]
 
def normalise(s):
 
    """
        but de la chose:
        retourner de noms de communes formatté:
        majuscules, sans accent, sans abréviation,
        les noms composés sont séparés par des tirets
    """
    tmp= s.lower()\
         .replace('-', ' ')
 
    for i in patternes_invariants:
        tmp= re.sub(i[0], i[1], tmp)
 
    l= tmp.split()
    j= []
    for i in l:
        trouve= 0
        for k in patternes_variants:
            if re.match(k[0], i):
                j.append(i.replace(k[1], k[2]))
                trouve= 1
                break
        if trouve== 0:
            j.append(i)
 
    return('-'.join(j)\
           .upper())
 
if __name__== '__main__':
    communes= [
    'St Leger près Troyes',
    'Ste Maure',
    'fouchères',
    'monmartin le ht',
    'virey s/s bar',
    'bar s/ seine',
    'celles s/-bar s/ seine',
    'brienne - le cht',
    'noë lès mallets',
    'St-Maurice',
    'Stains',
    'Brest',
    "l'Etape",
    'le gd vx st s/s la pte du mt du ht cht',
    'les gdes vielles stes s/s les ptes des mts des hts chtx']
 
    for i in communes:
        print(i, '\t', normalise(i))
çà marche très bien, mais, il y a un truc bizarre
un fichier .csv:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
commune	code postal	canton
ARCIS-SUR-AUBE	10700	ARCIS SUR AUBE
BALNOT-LA-GRANGE	10210	CHAOURCE
COURTENOT	10260	BAR SUR SEINE
FONTETTE	10360	ESSOYES
@fontaine       FONTETTE        
NOGENT-SUR-SEINE	10400	NOGENT SUR SEINE
VAL-D'-AUZON	10220	PINEY
COURCEROY	10400	NOGENT SUR SEINE
BALIGNICOURT	10330	CHAVANGES
LA-LOUPTIERE-THENARD	10400	NOGENT SUR SEINE
le truc curieux, c'est quand je sauve ce fichier, des délimiteurs de ligne, selon les cas sont écrit dans le fichier de sortie, mais des fois pas écrits. Je préfèrerais qu'ils n'y soient pas

les commandes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
>>> import DictCsv
>>> dic= DictCsv.DictCsv()
>>> dic.chargedict('essai.csv')
>>> print(dic.liste)
>>> dic.sauvedict('essai1.csv')
>>>
vous verrez, (enfin peut-être) que selon les lignes du fichier essai1.csv que les délimiteurs de ligne sont affichés ou pas
si quelqu'un a une explication, merci à lui
bon code à vous