IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

les fichiers .csv


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 10
    Points
    10
    Par défaut les fichiers .csv
    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

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Salut

    J'ai rien compris à ta question, et le code est quand même vachement peu clair.

    Moi j'ai ça en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    &,commune,&
    &,LA-LOUPTIERE-THENARD-10400-NOGENT-SUR-SEINE,&
    &,@FONTAINE-FONTETTE,&
    &,FONTETTE-10360-ESSOYES,&
    &,NOGENT-SUR-SEINE-10400-NOGENT-SUR-SEINE,&
    &,COURCEROY-10400-NOGENT-SUR-SEINE,&
    &,BALIGNICOURT-10330-CHAVANGES,&
    &,VAL-D'-AUZON-10220-PINEY,&
    &,BALNOT-LA-GRANGE-10210-CHAOURCE,&
    &,COURTENOT-10260-BAR-SUR-SEINE,&
    &,ARCIS-SUR-AUBE-10700-ARCIS-SUR-AUBE,&
    Que cherches-tu à obtenir exactement ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/08/2009, 02h51
  2. Librairies PERL pour les fichier csv
    Par flavia dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 11/08/2008, 19h41
  3. Les fichiers .csv
    Par nemesys971 dans le forum C
    Réponses: 27
    Dernier message: 03/06/2006, 17h29
  4. [CSV] Détecter le séparateur pour les fichiers CSV
    Par JavaEli dans le forum Langage
    Réponses: 1
    Dernier message: 01/12/2005, 00h42
  5. [Excel] séparateur pour les fichiers csv
    Par drinkmilk dans le forum Excel
    Réponses: 2
    Dernier message: 27/08/2005, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo