De todos es conocido que cuando haces una web con office mete mucha porquería dentro pero nunca llege a imaginar que de un archivo de 180Kbytes tan solo 10K's fueran de html real (del presentable que sirve para formar la web) :o, bueno como me han pedido que aligerara una web y había bastantes html's de 150K-200K... pues a mano va a ser que no.
Un rapido script en python que elimina los "comentarios" que introduce office, está especificamente hecho para el formato que he tenido entre manos, no se como de compatible podrá ser. Ahí va:
#C:/Python24/python.exe
# -*- coding: utf-8 -*-
import os, re
tag1_i="""<!--[if"""
tag1_f="""<![endif]-->"""
tag2="""<![if !vml]>"""
tag3="""<![endif]>"""
cuenta=0
cuentaglobal=0
debug=0
def reducir(cadena):
global cuenta
posi=cadena.find(tag1_i)
if posi != -1:
posf=cadena.find(tag1_f, posi+len(tag1_i))
if posf != -1:
cadena=cadena[0:posi]+cadena[posf+len(tag1_f):]
cuenta+=(posf-posi)
cadena=reducir(cadena)
else:
print '!! No se ha encontrado tag final para posicion: %i !!' % posi
cadena=cadena[0:posi]+cadena[posi+len(tag1_i):]
return cadena
def elimina_tags(cadena):
cadena=cadena.replace(tag2, '')
cadena=cadena.replace(tag3, '')
return cadena
def procesa_archivo(path):
global cuenta, cuentaglobal
cuenta=0
bin=open(path,'rb').read()
bin=reducir(bin)
bin=elimina_tags(bin)
if cuenta > 0:
if not debug: os.rename(path, path+'.backup')
print 'Guardado backup '+path+'.backup'
print 'Eliminados %i bytes' % cuenta
if not debug: open(path,'wb').write(bin)
print 'Guardada versieducida '+path
cuentaglobal+=cuenta
def procesa(arg, path, files):
m=re.compile('\.(htm|html)$', re.I)
for arch in files:
ppath=os.path.join(path, arch)
if os.path.isfile(ppath) and m.search(arch):
procesa_archivo(ppath)
if __name__ == '__main__':
os.path.walk('.', procesa, None)
print 'Reducidos %i bytes.' % cuentaglobal
Actualización:
Resulta que Microsoft ya tiene un programita que te quita los tags, Office 2000 HTML Filter 2.0, bueno, fue divertido ;D
Tags: python html office filtro
comentarios:
Publicar un comentario