Partage
  • Partager sur Facebook
  • Partager sur Twitter

exporter listes python dans fichier exel

Sujet résolu
    21 mai 2015 à 9:18:43

    Bonjour, je cherche a exporter des listes en python au format exels, 1 liste=colonne, j'aimerais que les premières lignes des colonnes soient réservés pour le nom de la liste, par exemple:

    listname=["nom", "prenom"]
    list1=["Bateau", "Chirac", "tutu"]
    list2=["Pierre", "Lola", "toto"]

    Ce qui donnerais:

    nom prenom

    Bateau Pierre

    Chirac Lola

    tutu toto

    voici mon code:

            app = 'Excel'
            xl = win32.gencache.EnsureDispatch('%s.Application' % app)
            ss = xl.Workbooks.Open(r'C:\MyFile.xls')
            sh = ss.ActiveSheet
            xl.Visible = True
            sleep(.1)  
            sh.Cells(1,1).Value = 'Export-to-%s : Items' % app
            sleep(.1)
            x=0
            for i in EventTableRFT:
                sh.Range("A1").Offset(0,x).Value = i #You need to increment the cell row
                x+=1
            sh.Cells(i+2,1).Value = "End of the List!"

    J'ai du mal a comprendre comment sa marche.

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2015 à 13:45:10

      Salut,
      Je ne connais pas le module que tu utilises, mais tu peux avoir une approche plus pythonique en utilisant un CSV.

      #!/usr/bin/python3
      # -*- coding: utf-8 -*-
      
      import csv
      import sys
      
      if __name__ == '__main__':
          listname=["nom", "prenom"]
          list1=["Bateau", "Chirac", "tutu"]
          list2=["Pierre", "Lola", "toto"]
      
          data = [[name] + values for name, values in zip(listname, (list1, list2))]
          writer = csv.writer(sys.stdout)
          writer.writerows(zip(*data))
      • Partager sur Facebook
      • Partager sur Twitter
        21 mai 2015 à 14:01:27

        Dans les tutos que je trouve sur csv, c'est plus comme ca qu'il font:

        import csv
        
        with open('names.csv', 'w') as csvfile:
            fieldnames = ['first_name', 'last_name']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        Peut on spécifier le fichier ou enregistrer directement dans writer, sans la boucle while ?

        • Partager sur Facebook
        • Partager sur Twitter
          21 mai 2015 à 14:44:30

          D’après la doc, voila ce qu'il faudrait faire :

          if __name__ == '__main__':
              listname=["nom", "prenom"]
              list1=["Bateau", "Chirac", "tutu"]
              list2=["Pierre", "Lola", "toto"]
          	
              csvfile= open("test.csv", "wb")
           
              data = [[name] + values for name, values in zip(listname, (list1, list2))]
              #writer = csv.writer(sys.stdout)
              writer = csv.writer(csvfile, data)
              writer.writerows(zip(*data))

          Mais j'ai l'erreur suivante:

          writer.writerows(zip(*data))
          TypeError: 'str' does not support the buffer interface




          • Partager sur Facebook
          • Partager sur Twitter
            21 mai 2015 à 15:35:51

            La fonction open ne s'utilise pas comme ça.

                with open("names.csv", "w") as f:
                    w = csv.writer(f)
                    w.writerow(listname)
                    w.writerows(zip(list1, list2))



            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2015 à 8:47:22

              Déjà, merci pour ton aide,

              Oui sa marche, mais y'a encore un problème, list1 et list2 sont dans la même colonne, dans exel tous dans A, moi je veut list1 dans A et list2 dans B

              Et c'était sa en faite le coeur de mon problème, comment on fait pour "naviguer" dans le fichier exel

              -
              Edité par cog3cog3 22 mai 2015 à 8:47:39

              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2015 à 9:25:30

                Le problème est peut être causé par une mauvais délimiteur de colonnes. csv.writer a par défaut les options proposées par Excel (avec un ",") pour faciliter l'importation. Mais tu peux définir celles que tu veux :

                with open("names.csv", "w") as f:
                    w = csv.writer(f, delimiter=";", lineterminator="\n")
                    w.writerow(listname)
                    w.writerows(zip(list1, list2))



                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2015 à 9:41:20

                  Oui sa marche merci !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mai 2015 à 11:23:42

                    J'ai modifier mon code, pour pouvoir mettre les données dans une liste de liste :

                    #!/usr/bin/python3
                    # -*- coding: utf-8 -*-
                     
                    import csv
                    import sys
                     
                    if __name__ == '__main__':
                        listname=["Nom variable1", "Nom variable2"]
                        list1=["1", "2", "3"]
                        list2=["8", "45", "150"]
                        listotal=[]
                        listotal.append(list1)
                        listotal.append(list2)
                    	
                     
                        data = [[name] + values for name, values in zip(listname, listotal)]
                    	
                    	
                    with open("names.csv", "w") as f:
                        w = csv.writer(f, delimiter=";", lineterminator="\n")
                        w.writerow(listname)
                        for element in listotal:
                            w.writerows(zip(element))

                    C'est pour l'écriture que sa peche, 

                        for element in listotal:
                            w.writerows(zip(element))

                    Comment dire que chaque element, doit être insérer dans une colonne différente ?


                    -
                    Edité par cog3cog3 22 mai 2015 à 11:24:11

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mai 2015 à 13:19:41

                      Prend l'habitude de tester dans une console :

                      >>> listotal = [["1", "2", "3"], ["8", "45", "150"]]
                      >>> list(zip(*listotal))
                      [('1', '8'), ('2', '45'), ('3', '150')]
                      >>> 

                      Un writerows sur ce résultat suffit :

                      w.writerows(zip(*listotal))



                      • Partager sur Facebook
                      • Partager sur Twitter

                      exporter listes python dans fichier exel

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown