Logo

¡Bienvenido a Stratos!

Acceder

Foros



Packer - Python

Iniciado por ethernet, 07 de Julio de 2004, 11:35:54 AM

« anterior - próximo »

ethernet

 
    Packer  



    Este código en python sirve para poder cargar y guardar objetos en disco comprimidos. A pesar de ser un codigo pequeño me ha resultado muy util en mi trabajo. Basta con pasarle el objeto y el fichero donde quieres guardarlo para salvar todo el objeto (gracias al serialize de python). A su vez hay una clase pak en la cual se puede incluir objetos y ficheros de forma que se pueden guardar ambos en el mismo paquete. A mi me ha resultado muy util para guardar resultados intermedios y configuraciones. Espero que os resulte util.

    un ejemplo de uso es:

import packer;
obj = ("hola",1234,open("fichero.txt").readlines());
packer.save(obj,"fichero.dat");





import pickle
import gzip


def save(object, filename, bin = 1):
       """Saves a compressed object to disk
       """
       file = gzip.GzipFile(filename, 'wb')
       file.write(pickle.dumps(object, bin))
       file.close()


def load(filename):
       """Loads a compressed object from disk
       """
       file = gzip.GzipFile(filename, 'rb')
       buffer = ""
       while 1:
               data = file.read()
               if data == "":
                       break
               buffer += data
       object = pickle.loads(buffer)
       file.close()
       return object


def compress(filename,so):

       file = open(filename, 'rb')
       o = gzip.GzipFile(so, 'wb')
       buffer = ""
       while 1:
               data = file.read()
               if data == "":
                       break
               o.write(data);
       file.close()
       o.close();


def decompress(f,so):

       o = open(so, 'wb')
       file = gzip.GzipFile(f, 'rb')
       buffer = ""
       while 1:
               data = file.read()
               if data == "":
                       break
               o.write(data);
       file.close()
       o.close()


class pak:

       def __init__(self,file):

               self.file = file;
               self.tosave = [];


       def loadpak(self,dir = "."):
               self.obj = {};
               obj = load(self.file);
               print obj
               for x in obj:
                       if(x[0] == "file"):
                               print "extracting ... %s"% dir +"\"+x[1];
                               f = open(dir+"\"+x[1],"w");
                               f.write(x[2]);
                               f.close();
                       else:
                               if(x[0]=="obj"):
                                       if(not self.obj.has_key(x[1])):
                                               self.obj[x[1]]= [x[2]];
                                       else:
                                               self.obj[x[1]].append(x[2]);
               return self.obj;


       def getobj(self):
               return self.obj



       def __end__(self):

               self.savepak();

       def savepak(self):
               save(self.tosave,self.file);

       def addfiles(self,l):
               for x in l:
                       self.addfile(x);

       def addfile(self,file):
               import string;
               i=string.rfind(file,"\");
               if(i<0):
                       _file = file;
               else:
                       _file = file[i+1:];
               print "inflating ... %s"%_file;
               self.tosave.append(("file",_file,open(file,"r").read()));
       def addobject(self,o,name="undef"):

               self.tosave.append(("obj",name,o));




if __name__ == '__main__':

       o = pak("tmp.pak");
       print        o.loadpak();




nsL

 muy chulo  (ole)
yo taba buscando algo parecido
Yo no muero hasta la muerte -






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.
Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.