#! /usr/bin/python3 # d'autres types d'encodage du fichier sont possibles: # latin-1, latin-15... sauvegarder en conséquence # Jean-Christophe Beumier 2013.09.10 - Licence GPL2 # Attention: "var" est un élément de la liste "vars" import os, sys # deux modules nécessaires (built-in) chemin="/home/jc/sites/" cible=input("Fichier ou répertoire: "+chemin) # détermination du fichier ou du répertoire à traiter lieu=chemin+cible if os.path.isfile(lieu): # s'il s'agit d'un fichier fichiers=[lieu] elif os.path.isdir(lieu): # s'il s'agit d'un répertoire fichiers=[] dossier=os.listdir(lieu) # le contenu du répertoire for fichier in dossier: if len(fichier)>5: if fichier[-4:]==".htm" or fichier[-5:]==".html": # filtre fichiers+=[chemin+cible+"/"+fichier] else: print("Ni fichier ni répertoire de ce nom.") input("[Enter] pour quitter le script") sys.exit() for i in fichiers: han=open(i,"r") texte=han.read() han.close() # élimination des # "code1" // "commentaire1 --> code2" // "commentaire2 --> code3"... morceaux=texte.split("") lettres=list(bribes[0]) # liste des lettres d'un commentaire for k in range(len(lettres)): # suppression des commentaires lettre par lettre, tout en if lettres[k]!="\n": lettres[k]="" # respectant les fins de ligne bribes[0]="".join(lettres) # recolle ce qu'il reste: \n\n... morceaux[j]="".join(bribes) # recolle chaque morceau texte="".join(morceaux) # recolle tous les morceaux du texte # numérotation des balises selon les lignes du texte # -> explication de la sauvegarde des fins de lignes des commentaires balises=[] lignes=texte.split("\n") # lignes= liste des lignes du fichiers for j in range(len(lignes)): ligne=lignes[j] if "<" in ligne: # ligne contenant une balise? decomp=ligne.split("<") # découpe à chaque début de balise for k in range(1,len(decomp)): balise=decomp[k].split(">")[0] # découpe à droite de la balise if " " in balise: balise=balise.split()[0] # coupe des attributs balises+=[[j+1, balise]] # liste de listes [ligne, balise] # élimination des balises "autofermées" (mais sans "/>" # parcours à l'envers de la liste for j in range(len(balises)-1,-1,-1): if balises[j][1] in ['br','hr','img','area','input','meta','link','!DOCTYPE','!doctype']: balises.pop(j) # élimination des balises bien balancées j=0 while -1