Bonjour à tous,

L'exercice consistait à extraire d'un fichier texte les lignes correspondant à des prénoms dont la première lettre est située entre F et M inclus. J'ai assez rapidement trouvé la méthode ".spli()" me permettant de travailler dans la "colonne" des prénoms. Mais pour élaborer une "requête", je n'ai rien trouvé, j'ai pourtant cherché plusieurs heures dans la documentation. J'ai essayé du coté des expressions régulières, mais mon niveau actuel ne ma pas permis de comprendre comment les utiliser dans ce contexte. J'ai donc décidé de coder ma propre fonction pour réaliser le "masque" de cette requête. Cela fonctionne très bien, mais je pense qu'il doit y avoir beaucoup plus simple pour cibler dans une plage comprise entre deux lettres

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
# Extraire d'un fichier csv les lignes correspondant à des prénoms dont la première lettre est située entre F et M inclus.
 
# fonctions
def filtre(debut, fin):
    'creation d une chaine pour la recherche'
    alphabetMaj=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    alphabetMin=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    indexDebut=alphabetMaj.index(debut)
    indexFin=(alphabetMaj.index(fin)+1)
    return ''.join(alphabetMaj[indexDebut:indexFin]+alphabetMin[indexDebut:indexFin])
 
def extraction(source, destination, colonne, filtre):
    'extraction des lignes par rapport a une colonne et un filtre'
    fs=open(source, 'r', encoding="utf-8")
    fd=open(destination, 'w', encoding="utf-8")
    while 1:
        ligne=fs.readline()
        if ligne=='':
            break
        mot=ligne.split(';')[colonne-1]
        if mot[0:1] in filtre:
            fd.write(str(ligne))
    fs.close()
    fd.close()
 
# main
extraction('repertoire.csv','extraction.csv', 2, filtre('F','M'))