Stratos: Punto de Encuentro de Desarrolladores

¡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.