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 :

création de plusieurs listes


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut création de plusieurs listes
    Bonjour à tous

    Je me tourne vers la communauté pour demander votre aide

    Je dois concevoir un programme me permettant de récupérer un fichier csv, d'enlever les colonnes qui ne m'intéressent pas et de faire un nouveau fichier csv.
    Ce procéder me permettra d'intégrer plus facilement et plus rapidement le nouveau fichier csv dans un logiciel de gestion (automatique).

    Alors tout est presque fait mais il me manque encore une petite chose dont je n'arrive absolument pas à faire...

    Je voudrais créer "n" liste en fonction de mon nombre de ligne que je possède dans mon fichier csv.

    j'ai donc voulu faire une fonction mais sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    n=0
    x=9
    def listecsv(x) :
        while (n!=x+1) :
            listecsv(n) = list()
            n=n+1
     
    listecsv(x)
    mais voilà l'erreur que j'ai en faisant cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    can't assign to function call
    une marque rouge s'affiche à la ligne 5, début de ligne

    Je vois l'erreur mais je n'arrive pas à le faire, modifier mon code pour changer ça... quelqu'un pourrait m'orienter svp ?

    merci beaucoup

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Points : 67
    Points
    67
    Par défaut
    Le message est assez explicite si on comprend un peu l'anglais : tu essaies d'assigner un valeur à un appel de fonction, ce qui ne peut se faire.

    C'est comme si tu essayais de faire:
    Par ailleurs, ta fonction ne retourne rien (pas de "return" à la fin). Et je ne crois pas qu'une fonction récursive ait de l'intérêt dans ce cas.

    Je ne sais pas ce que tu souhaites obtenir comme résultat, mais peut-être que la construction d'une simple liste de liste suffirait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def listecsv(x):
        listedelistes = []
        for i in xrange(x):
            listedelistes.append([])
        return listedelistes
    Tu peux aussi faire quelque-chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listedelistes = [[] for i in xrange(3)]

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Si je comprend ton code, tu veux mettre toutes les listes dans une seul ?
    car c'est pas vraiment ce que je souhaite avoir malheureusement... :s

    je possède un fichier csv que je vais extraire dans des listes.
    Je m'explique :

    Chaque lignes que contient mon csv sera affecté à une nouvelle liste pour être ensuite traiter une par une des que les listes seront créées.

    fichiercsv.ligne1 = Liste1
    fichiercsv.ligne2 = Liste2
    fichiercsv.ligne3 = Liste3
    fichiercsv.ligne4 = Liste4
    etc...

    je vais donc extraire chacune de mes lignes dans une liste indépendante pour la traiter ensuite.

    voici mon code mais avec une seul liste, pour une ligne :

    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
    import csv
     
    #ouverture de mes fichiers
    fichier = open("Python1.csv","r")
    fichier2 = open("NewPython1.txt","a")
    fichiercsv1 = csv.reader(fichier, delimiter=";")
    fichiercsv2 = csv.writer(fichier2, delimiter=";")
    listecsv1 = list ()
    n=1
    a=1
     
    #######################
    #Ici je voudrait faire ma fonction#
    #######################
     
    #J'extrait chaque ligne dans une liste indépendante
    for ligne in fichiercsv1 :
        if n==1 : #Je mets cette condition pour ne prendre que la première ligne puisque je n'ai qu'une seul ligne
            listecsv1 = listecsv1 + ligne
            n=n+1
        else :
            print ("je passe la ligne ",n,"\n")
            n=n+1
     
    print (listecsv1)
     
    #suppression de certains champ que je ne veux integrer
    listecsv1.remove(listecsv1[2]) 
    listecsv1.remove(listecsv1[18])
    listecsv1.remove(listecsv1[9])
    listecsv1.remove(listecsv1[14])
     
    print (listecsv1)
     
    #j'ecris dans mon nouveau fichier mes nouvelles valeurs que je veux
    for champ in listecsv1 :
        if (champ != "") :
            fichier2.write(champ)
            fichier2.write(";")
            a=a+1
        else :
            a=a+1
     
    #fermeture de mes fichiers
    fichier.close()
    fichier2.close()
    donc ce que je voudrais c'est supprimer les lignes 18, 21, 22 & 23
    et remplacer la ligne 19 par quelques chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listecsv(n) = listecsv(n) + ligne
    et "n" sera une valeur que j'incrémenterai.
    mais pour faire ça, je dois créer n liste indépendante que je ne connais pas, puisque quand nous allons l'utiliser, nous n'aurons pas les même nombres de lignes :s

    alors je sais pas si c'est moi qui n'ai pas compris ton message avec ton code sinon... et j'en suis vraiment désolé

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Si je comprend ton intention, c'est ceci que tu devrais avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for ligne in fichiercsv1 :
        if n==1 : #Nous sommes d'accord qu'il s'agit bien de la deuxième ligne, hein ?
            listecsv1.append(ligne)
            n=n+1
        else :
            print ("je passe la ligne ",n,"\n")
            n=n+1

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Points : 67
    Points
    67
    Par défaut
    Je ne suis pas sûr de bien te comprendre.

    Est-ce que tu veux ouvrir un fichier csv pour en extraire certains champs pour chaque ligne et écrire le résultat dans un nouveau fichier?

    quelque chose comme ça?:
    fich1.csv
    1111111;222222;333333
    4444444;555555;666666

    fich2.csv
    1111111;333333
    4444444;666666

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Tout à fait Delbor, c'est exactement mon but
    du moins je prends toutes les valeurs qui m'intéressent pour les intégrer dans le nouveau fichier csv

    je suis en train de tester la version de VinsS
    C'est d’ailleurs le parcours des données qui est par la suite un peu complexe ^^
    mais ça devrait ce jouer

    pour répondre à VinsS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #Nous sommes d'accord qu'il s'agit bien de la deuxième ligne, hein ?
    non je prends bien la première ligne puisque n est définie au départ à 1, donc je prends bien mon en-tête qui était le but pour mon test

    edit : je test mais j'ai un doute que je pourrais énoncer demain

  7. #7
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Oublies l'histoire de la deuxième ligne, c'est moi qui n'ai pas été attentif au fait que tu as initialisé ton compteur n à 1.

    Donc je suppose que tu as compris le changement de code avec la méthode append()

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Points : 67
    Points
    67
    Par défaut
    Alors je travaillerais avec une liste de liste, ce vers quoi tu sembles d'ailleurs te diriger avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listecsv(n) = listecsv(n) + ligne
    Note cependant que ce n'est pas réalisable en l'état puisque tu essaies d'attribuer un valeur à un appel de fonction.

    Par ailleurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listecsv = listecsv + ligne
    équivaut a: si listecsv est une liste, ce qui n'est pas ce que tu veux (je suppose)

    Avec un liste de listes, ça pourrait donner quelque chose comme:
    ou plus simplement:
    et pour la suppression des champs qui ne t'intéressent pas, tu parcours ta liste avec un "for":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n in listecsv:
        listecsv[n].pop(2)
        listecsv[n].pop(18)
    etc...

    ou plus court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n in listecsv:
        for i in [2,18,9,14]:
            listecsv[n].pop(i)

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Super, en effet le code suivant

    suivi de la commande :

    me permettent bien de faire la recherche ligne par ligne

    Je vous remercie sincèrement pour votre aide
    Merci à vous de m'avoir permis de finir ce programme

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Voici donc le résultat pour ce qui sont curieux :

    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
    import csv
     
    fichier = open("Python1.csv","r")
    fichiercsv1 = csv.reader(fichier, delimiter=";")
    listecsv = list ()
    n=0
    nbligne=0
     
    for ligne in fichiercsv1 :
        listecsv.append(ligne)
        n=n+1
     
    nbligne=n
     
    print ()
    print ("NOMBRE DE LIGNE : \n",n)
    print ()
    print ("=====LISTE INITIAL=====\n")
    print (listecsv)
    print ()
    x=input("APPUYER SUR UNE TOUCHE POUR COMMENCER LE TRAITEMENT=====\n")
    print (x)
    print ()
    print ("=====TRAITEMENT EN COURS=====\n")
    print ()
     
    a=0
    b=0
    while (a!=n) :
        listecsv[a].pop(19)
        listecsv[a].pop(14)
        listecsv[a].pop(9)
        listecsv[a].pop(4)
        b=b+4
        a=a+1
     
    print ()
    print ("=====FIN TRAITEMENT=====\n")
    print ()
    print()
    x=input("TRAITEMENT EFFECTUE AVEC SUCCES, APPUYER POUR CONTINUER=====\n")
    print (x)
    print ()
    print ("=====AFFICHAGE RESULTAT TRAITERMENT=====\n")
    print (listecsv)
    print ()
     
    d=0
    while (d!=nbligne):
        fichier2 = open("NewPython1.txt","a")
        fichiercsv2 = csv.writer(fichier2, delimiter=";")
        for champ in listecsv[d] :
            if (champ == listecsv[d][0]):
                fichier2.write(champ)
            else :
                if (champ != "") :
                    fichier2.write(";")
                    fichier2.write(champ)
        fichier2.write("\n")
        fichier2.close()
        d=d+1
     
    print ("====PHASE DE VERIFICATION=====\n")
    print ("MODIFICATIONS EFFECTUES : ",b,"\n")
    print ("NOUVEAU FICHIER 'NewPython1.csv' [PRET]\n")
    x=input("APPUYER POUR SORTIR\n")
    print (x)
     
    fichier.close()

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

Discussions similaires

  1. [XL-2010] Création d'une liste selon conditions sur plusieurs feuilles
    Par jossuka dans le forum Excel
    Réponses: 2
    Dernier message: 29/10/2012, 09h59
  2. Création de plusieurs colonnes dans une List
    Par WibiMaster dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 21/06/2010, 14h45
  3. création de plusieurs listes chainées
    Par khichpich dans le forum Débuter
    Réponses: 8
    Dernier message: 15/01/2009, 00h30
  4. Création d'une liste ...
    Par keryss dans le forum Access
    Réponses: 6
    Dernier message: 21/10/2004, 09h00

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