Bonjour à tous.

Je rencontre un petit problème pour écrire un fichier CSV à partir de python. Il s'agit d'un travail sur des données contenant des données d'observation d'espèces animales sur plusieurs communes

Mon script doit normalement enfermer des informations à écrire dans un dictionnaire (nommé dico 2).

Puis ce dico est transmis à un objet DictWriter pour qu'il l'écrive dans un fichier. Une boucle permet d'écrire plusieurs lignes successives.

Le script est le suivant:

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
# usr/bin/python
 
import csv
 
global dico,  listeEspeces, coefSeuil,  dico2
dico = {}                                   
dico2 = {}
listeEspeces = []
coefSeuil  = 0.95
 
def listeEspeceDico(ligne):
    """traitement des lignes transmises en entrée"""
    for e in ligne[2].split(' - '):
        if e not in listeEspeces: #si l'espèce rencontrée n'est pas déjà dans la liste, on l'ajoute
            listeEspeces.append(e)
    dico[ligne[1]] = len(listeEspeces)  #création d'un dico contenant une date et une espèce observée
    return dico
 
###Main###
 
with open('filetest.csv', 'r') as f: #ouverture et lecture du fichier source
    lecture = csv.reader(f, delimiter=',')
    communeActuelle = ''
 
    for ligne in lecture: #lecture de la commune contenue dans la présente ligne
        nouvelleCommune = ligne[0]
        if communeActuelle == '':
            communeActuelle = nouvelleCommune
 
        if communeActuelle == nouvelleCommune: #bouclage si la commune est toujours la même
            listeEspeceDico(ligne)
            continue
 
        else:  #tout foire à partir de ce bloc
            nbJr = 0
            for cle in dico: #on recherche la date à partir de laquelle               
                nbJr += 1    #on a observé 95% des especes
 
                if dico[cle] >= coefSeuil*len(listeEspeces):
                    dico2['commune'] = communeActuelle    #puis on crée un dico contenant
                    dico2['nbJrSeuil'] = nbJr             #commune et nb de jour d'observation
 
            with open('sortie.csv', 'a', encoding = 'utf-8') as f: #Ouverture du fichier destination
                fieldnames = ['commune', 'nbJrSeuil']
                writer = csv.DictWriter(f, fieldnames=fieldnames)
                writer.writerow(dico2)   #écriture des infos de dico2 dans le csv
 
            dico = {}   #remise à 0 des variables pour un nouveau tour de boucle
            listeEspeces = []
            communeActuelle = nouvelleCommune  #on précise au programme qu'on change de commune
            listeEspeceDico(ligne)
Le programme ne renvoi pas le nombre de lignes annoncées. La ou je dois normalement avoir 3 lignes avec: "Commune" et "nb de jours"

commune nbJrSeuil

1 3

2 4

3 4

J'obtiens deux lignes avec le mauvais nombre de jours

commune nbJrSeuil

1 4

2 4

J'ai fais un grand nombre de test, mais je ne situe toujours pas le problème..