Stratos

Autor Tema: Packer - Python  (Leído 3231 veces)

ethernet

  • Moderador
  • Stratos
  • *****
  • Mensajes: 3717
    • MSN Messenger - s4n74n4@hotmail.com
    • Ver Perfil
    • http://blep.blogspot.com
    • Email
Packer - Python
« en: 07 de Julio de 2004, 10:35:54 am »
 
    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:
Código: [Seleccionar]
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

  • Stratos
  • Mensajes: 432
    • Ver Perfil
Packer - Python
« Respuesta #1 en: 07 de Julio de 2004, 07:03:49 pm »
 muy chulo  (ole)
yo taba buscando algo parecido
Yo no muero hasta la muerte -