Partage
  • Partager sur Facebook
  • Partager sur Twitter

conversion de fichier pkl en fichier txt

    17 février 2016 à 10:24:57

    Bonjour je suis débutante en python j'ai un fichier pkl qui contient un jeu de donnée et je devrai le convertir en fichier txt j'ai réussit à la convertir et aussi a visualiser pour chaque variable les valeurs correspondantes en dessous mais je n'arrive pas à visualiser mes variables comme une matrice, j'ai un résultat cour forme de vecteur

    voila le code que j'ai fais

    import cPickle

    output = open("/home1/homedir6/perso/fisfoula/Bureau/test1.txt","w")

    data=cPickle.load(open("/home/cercache/users/oarcher/gpm/kupr_out_enewetak.pkl","rb"))

       

    var= data.keys()

    print var


    for i in range(0,len(var)):   
        a=var[i]
        res = data[a][0:]

        output.write(a)
        output.write('\n')
        for j in res :
         output.write('%s '%(j))
         output.write('\n')

    • Partager sur Facebook
    • Partager sur Twitter
      17 février 2016 à 13:13:30

      Bonjour

      pouvez vous me répondre

      • Partager sur Facebook
      • Partager sur Twitter
        17 février 2016 à 15:33:26

        Tu pourrais donner un exemple (très court) de ce que tu as dans le fichier pkl, ce que tu obtiens dans le fichier txt et ce que tu aurais aimer avoir dans celui-ci.

        Également, tu fais un print(var). Que vaut var?

        • Partager sur Facebook
        • Partager sur Twitter
        Précepte: Le mieux est l'ennemi du bien
          17 février 2016 à 16:01:12

          Bonjour

          c'est bon j'ai réussit a lire le fichier comme je veux mais le soucis c que j 'ai des variables qui n'ont pas les mm nombre de valeurs alors la je suis bloqué je sais pas comment faire pour lui dire de passer à l'autre variable 

          j'ai un fichier .pkl aprés conversion je trouve un fichier txt remplis comme suit

          A[1 2 5 4 7 8 9], B[5 9 7 5 13 4],C[54 2 45 11 52 44]

          et moi je voulais avoir un fichier du type

          A   B    C

          1   5    54

          2   9    2

          .....

          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2016 à 16:02:56

            pour var c les noms de mes variables j'ai refais le code et j'ai maintenant ça mais le souci c que je veux qu il m ecrit els valeurs de la variables mm si il n'a pas beaucoup de valeur

            voici le code

            mport cPickle
            #import matplotlib.pyplot as plt
            import numpy as np
            #import pandas as pd
            #from pylab import *
            #import scipy.stats
            output = open("/home1/homedir6/perso/fisfoula/Bureau/test1.xlsx","w")
            data=cPickle.load(open("/home/cercache/users/oarcher/gpm/kupr_out_enewetak.pkl","rb"))
            var= data.keys()
            longueur = np.zeros((1, len(var)), dtype = np.int)
            for i in range(0,len(var)-1): 
                 #res=val[j]
                 output.write(var[i])    
                 longueur[0,i]=len(data[var[i]])
                 #output.write('%i'%(longueur))
                 output.write(' ')
            output.write('\n')
            for j in range(0,np.amax(longueur)-1):
                for l in range(1,50):
                    if j<len(data[var[l]]):
                        k = data[var[l]][j]
                        output.write('%s '%(k))
                        output.write('')           
                output.write('\n')

            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2016 à 18:10:58

              Apparemment var est un dictionnaire. Les clés sont les noms des variables et les valeurs sont des listes.

              Voici comment j'aurai fait:

              from itertools import zip_longest
              
              
              dico = {"A": [1, 2, 3], "B": [10, 20, 30, 40, 50], "C": [100]}
              
              with open("mon_fichier.txt", "w") as f_obj:
                  nom_variable = " ".join(dico.keys()) + "\n"
                  f_obj.write(nom_variable)
              
                  for elt in zip_longest(*dico.values()):
                      valeurs = " ".join(str(val) if val else " " for val in elt) + "\n"
                      f_obj.write(valeurs)


              Je n'utilise pas zip mais zip_longest, car le premier itère simplement sur la taille du plus petit itérable. À l'inverse zip_longest itère sur celui qui est le plus grand (et rajoute des None aux autres quand ils non plus de valeurs). C'est pour ça qu'à la ligne 11 je vérifie que la valeur n'est pas un None. Si c'est le cas, je remplace cette valeur par un espace (Si tu préfère mettre autre chose, il te suffit de changer le " " en ce que tu veux ("0" par exemple).

              J'ai essayé de découper le code pour que tu le comprennes. nom_variable concatène les noms (avec la méthode join) en mettant un espace entre chacun d'eux. Les noms sont récupérés avec la méthode keys des dictionnaires. À la ligne suivante j'écris cette ligne dans le fichier.

              Vient ensuite la boucle principale pour écrire les valeurs. Comme précédemment, j'utilise la méthode join pour concaténer les valeurs qui sont récupérés grâce à la méthode values (en vérifiant, comme je l'ai dit, si la valeur n'est pas None. Si ce n'est pas le cas, je transforme celle-ci en chaîne de caractère). Et à la ligne suivante j'écris les valeurs dans le fichier.

              Une remarque: Avoir un joli affichage dans le fichier c'est bien (c'est même important). Mais attention à ne pas trop complexifier le traitement juste pour avoir quelque chose de joli. Le plus important se sont les données ;). Je dis ça car ce traitement me semble compliqué, alors que le code suivant:

              dico = {"A": [1, 2, 3], "B": [10, 20, 30, 40, 50], "C": [100]}
              
              with open("mon_fichier.txt", "w") as f_obj:
                  for variable in dico:
                      f_obj.write(variable)
                      f_obj.write(" " + " ".join(str(val) for val in dico[variable]) + "\n")

              dont l'affichage sera:

              A 1 2 3
              B 10 20 30 40 50
              C 100

              me paraît plus pratique pour le réutiliser. Après peut-être que ce format est nécessaire pour un autre logiciel et dans ce cas no problem :soleil:

              • Partager sur Facebook
              • Partager sur Twitter
              Précepte: Le mieux est l'ennemi du bien
              Anonyme
                17 février 2016 à 19:43:55

                Pourquoi ne pas utiliser le module json ? Ça fonctionne comme Pickle.

                import json
                
                data = { ... }
                
                with open('data.json', 'w') as file:
                    json.dump(data, file)
                
                with open('data.json') as file:
                    data = json.load(file)
                

                EDIT: En revanche les fichiers XLSX sont des fichiers binaires pour Excel, pas des fichiers textes.

                -
                Edité par Anonyme 17 février 2016 à 19:51:55

                • Partager sur Facebook
                • Partager sur Twitter
                  17 février 2016 à 20:57:37

                  Bonsoir 

                  Merci c'est bon ça marche maintenant 

                  je dois maintenant faire une étude statistique sur les données du fichier pouvez vous m'indiquer un tutoriel qui poura m'aider 

                  Merci encore une fois

                  • Partager sur Facebook
                  • Partager sur Twitter

                  conversion de fichier pkl en fichier txt

                  × 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