(http://www.stratos-ad.com/forums/style_images/1/pip.gif) Packer (http://www.stratos-ad.com/forums/style_images/1/pip.gif)
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();