CodeEleve.py

Vincent Riboulet, 03/15/2018 02:47 pm

Download (2.7 kB)

 
1
# programme créant un identifiant unique avec les premières lettres du nom et du prenom
2
# afin d'utiliser codegrid de Auto Multiple Choice
3
# Permet de tester le nombre de lettres à utiliser
4
# lit un fichier ListeEleves.csv
5
# et crée un fichier ListeElevesUnique.csv
6
# V. Riboulet mars 2018
7
8
import unidecode   # pour la conversion en ASCII
9
10
N = 3    # nombre de caractères prit dans le début du nom
11
M = 3    # nombre de caracteres prit dans le début du prenom
12
13
fichier = open("ListeEleves.csv", "r")   # ouverture du fichier, au format AMC 'classique', colone identifant = 'num'
14
EnTete = fichier.readline()
15
#print(EnTete)
16
Liste = EnTete.split(",")   # suppose que les séparateurs sont des virgules
17
IndicePrenom = Liste.index("prénom")   # cherche la colone prénom
18
IndiceNom = Liste.index("nom")         # cherche la colone nom
19
IndiceNum = Liste.index("num")         # cherche la colone num (la clé)
20
21
Newfichier = open("ListeElevesUnique.csv", "w")   # nouveau fichier en mode écriture
22
Newfichier.write(EnTete)    # recopiage de l'entete
23
24
L = []   # initialisation liste des codes uniques
25
n=0      # initialisation compteur d'étudiants
26
27
for ligne in fichier:
28
    Liste = ligne.split(",")   # on met les élèments d'une ligne dans une liste
29
30
    nom = Liste[IndiceNom]         # récupération du nom dans la liste
31
    nom = "".join(nom.split(" "))    # pour virer les espaces
32
    nom = "".join(nom.split("-"))    # pour virer les tirets
33
    nom = unidecode.unidecode(nom)   # pour virer les accents et cédiles (ASCII)
34
35
    prenom = Liste[IndicePrenom]     # récupération du prenom dans la liste
36
    prenom = "".join(prenom.split(" "))    # pour virer les espaces
37
    prenom = "".join(prenom.split("-"))    # pour virer les tirets
38
    prenom = unidecode.unidecode(prenom)    # passage en ASCII
39
40
    code = nom[:N] + prenom[:M]   # création du code à partir du début du nom et prénom
41
    code = code.upper()         # passage en majuscules
42
    #print(code)
43
44
    code = "".join(set(code))  # enlève les lettres en doublon
45
    #print(code)
46
    
47
    etu = "".join(sorted(code))    # range dans l'ordre alphabétique
48
    #print(etu)
49
    
50
    L.append(etu)    # on stocke dans une liste pour pouvoir tester les doublons
51
    n += 1            # on incrémente le nombre d'étudiants
52
    
53
    Liste[IndiceNum] = etu    # on met en place le nouveau code dans la liste ligne
54
    NewLigne = ",".join(Liste)    # crée la nouvelle ligne
55
    Newfichier.write(NewLigne)    # l'écrit dans le fichier
56
    
57
fichier.close()         # on ferme les fichiers ouverts
58
Newfichier.close()
59
60
print(n, "etudiants")
61
print("avec les", N, "premières lettres du nom et les", M, "premières lettres du prénom") 
62
print(len(set(L)), "codes différents")
63
#print(set(L))