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 :

[CSV] Insérer dans une liste chaque colonnes sous forme de liste [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club Avatar de Kassumaye
    Homme Profil pro
    Amateur
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut [CSV] Insérer dans une liste chaque colonnes sous forme de liste
    Bonjour,

    J'ai un fichier csv représentant un calendrier. chaque colonne est un mois chaque ligne un jour de ce mois (1,2,3,..,30,31). Si la date est importante pour mon projet la cellule contient un simple "X". J'aimerais au final crée une liste date[] contenant les dates importantes classées sous la forme chronologique [jour,mois]
    ex: date[[7,9],[14,9], ... ,[3,5],[10,5]]

    Mon idée de débutant était de d'abord créer une liste contenant une liste pour chaque mois, ensuite de recherché dans cette liste les chaines "X" ou "x" de chaque liste et de crée une nouvelle liste contenant [j,m] ou j est l'index d'une chaine X dans la liste imbriquée et m celui de la liste imbriquée + ou - une constante suivant qu'on soita la fin de l'année ou au début de la nouvelle (car oui la période est sur une année scolaire et non une année civile)

    Je n'en suis pas encore là, c'est juste pour que vous compreniez le sens de ma démarche, au cas ou il y a une solution plus efficace pour arriver a ce que je veux faire.

    Pour l'instant je veux créer la liste contenant les données brutes des cellules, colonne par colonne. Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from csv import *
     
    lmd,ul=[],[]
    i=1
    with open("Template_Calendar.csv","r",newline='') as test:
        testcsv=reader(open("Template_Calendar.csv","r"))
        while i<10:
            for row in testcsv:          #Lister une colone
                rowX=row[i]
                ul.append(rowX)
            lmd.append(ul)       
            ul=[]                             # Réinitialisation de la liste provisoire
            i+=1
        print(lmd)
    Ce code ne fonctionne pas comme attendu. Il marche une fois et me remplis bien la colonne septembre sous forme de liste dans lmd, mais ensuite je n'ai que des listes vides ...

    Voici ce que donne le print :
    [['September', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '', 'September'], [], [], [], [], [], [], [], []]
    a la première boucle il place bien les données de row[i] dans la liste temporaire, la liste temporaire est bien ajoutée a la liste finale mais ensuite la liste temporaire reste vide. pourtant i est bien incrémenté, j'ai bien 9 listes dans la liste finale.

    Pourriez vous m'indiquer mon erreur?
    Et en bonus si vous aviez un tutoriel a m'indiquer pour le traitement des fichiers csv je suis preneur, car ce que j'ai trouvé en faisant une recherche n'est pas complet et la lecture de la doc ne m'a pas aider.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Ce que tu veux faire n'est rien d'autre qu'un histogramme, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    l = [[] for i in range(10)]
    for row in testcsv:
        for i in range(10)
            l[i].append(row[i])
    Mais tu n'as pas définit de séparateur entre colonnes donc mon code ne marchera pas si tu l'appliques tel quel.
    Il faut que row soit itérable.

  3. #3
    Membre du Club Avatar de Kassumaye
    Homme Profil pro
    Amateur
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut
    Salut, merci pour l'optimisation du code, mais je crois que je n'arrive pas a rendre row itérable.

    j'ai bien tenté de ce nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with open("Template_Calendar.csv","r",newline='') as test:
        testcsv=reader(test,delimiter=',')
        l = [[] for i in range(10)]
        for row in testcsv:
            for i in range(10):
                l[i].append(row[i])
        print(l)
    mais il me renvoie cette erreur:
    IndexError: list index out of range

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Cette erreur signifie que tu dépasses le nombre de colonnes.

    Essaye comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            for i, item in enumerate(row):
                l[i].append(item)

  5. #5
    Membre du Club Avatar de Kassumaye
    Homme Profil pro
    Amateur
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut
    Merci à toi, ce code marche parfaitement ! j'ai bien une liste qui contient une liste des valeurs de chaque cellules dans chaque colones
    voici donc le code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with open("Template_Calendar.csv","r",newline='') as test:
        testcsv=reader(test,delimiter=',')
        l = [[] for i in range(10)]
        for row in testcsv:
            for i, item in enumerate(row):
                l[i].append(item)
        print(l)
    Cependant j'ai abandonner le module csv car hier dans mes recherches je suis tombé sur le module openpyxl qui m'a permis de créer directement ma liste finale sans passé par cette étape intermédiaire. Mon but étant de créer une liste contenant des dates sous la forme [jour,mois] ordonnées chronologiquement. De plus un fichier excel est plus approprié qu'un fichier csv vu qu'il garde le formatage des cellules.

    voici ma fonction:
    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
    def calendar(calendar_f):
        global calendar_l
        ul=[]
        chx,chX ="x","X"
        wb = load_workbook(calendar_f)
        ws = wb.active
     
        for c in range(1, 13):
            m = c + 7
            if c > 5:
                m = c - 5
            for l in range(1, 33):
                d = ws.cell(row=l, column=c)
                chd = d.value
                if chd == chx or chd == chX:
                    ul = [l - 1, m]
                    calendar_l.append(ul)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/02/2014, 12h38
  2. Recuperer les donnees d'une base de donnee sous forme de liste
    Par j-gat dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/11/2010, 03h45
  3. [SP-2007] Extraire des fichiers Excel ou Csv contenu dans une liste sharepoint
    Par stardeus dans le forum SharePoint
    Réponses: 23
    Dernier message: 03/11/2010, 15h11
  4. [MySQL] Récupérer et insérer dans une liste déroulante
    Par etudianti4 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2008, 21h04
  5. Réponses: 5
    Dernier message: 19/04/2005, 09h46

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