Module bloc1Pack.HTML_global
Générer un fichier HTML contenant toutes les données du fichier initial sous la forme d’un tableau (balise table) statique. Étant donné le nombre important de lignes du tableau initial, 66 096, on fait le choix de générer plusieurs fichiers HTML pour séparer ce tableau en sous-tableaux et ainsi afficher toutes les données sur plusieurs pages. Ainsi le navigateur est soulagé et l'affichage plus rapide !
- Le tableau doit être trié selon :
- les régions (colonne AB), index 27
- puis les départements (colonne AA), index 25
- puis le code de la commune (colonne I), index 8
- puis le nom de l’établissement (colonne B) index 1
- La ligne des titres doit visuellement se démarquer
- Les autres lignes doivent être alternativement sur fond gris clair et blanc
Expand source code
#!/usr/bin/python3
#-*- coding: utf8 -*-
# @author : Sébastien LOZANO
"""Générer un fichier HTML contenant toutes les données du fichier initial sous la forme d’un tableau (balise table) statique. Étant donné le nombre important de lignes du tableau initial, 66 096, on fait le choix de générer plusieurs fichiers HTML pour séparer ce tableau en sous-tableaux et ainsi afficher toutes les données sur plusieurs pages. Ainsi le navigateur est soulagé et l'affichage plus rapide !
* Le tableau doit être trié selon :
* les régions (colonne AB), index 27
* puis les départements (colonne AA), index 25
* puis le code de la commune (colonne I), index 8
* puis le nom de l’établissement (colonne B) index 1
* La ligne des titres doit visuellement se démarquer
* Les autres lignes doivent être alternativement sur fond gris clair et blanc
"""
pass
# On fait les imports nécessaires selon le contexte
if __name__ == "__main__":
import PY_functions as b1f
import HTML_constantes as html_const
else:
import bloc1Pack.PY_functions as b1f
import bloc1Pack.HTML_constantes as html_const
############################################################################################################
# Importation des bibliotheques
############################################################################################################
from operator import itemgetter # Pour la gestion du tri des listes de tuples
import os # Notamment pour générer la documentation et la création de répertoires
############################################################################################################
# Générer un fichier HTML contenant toutes les données du fichier initial sous la forme
# d’un tableau (balise table) statique
#===> Le tableau doit être trié selon :
# ===> les régions (colonne AB), index 27
# ===> puis les départements (colonne AA), index 25
# ===> puis le code de la commune (colonne I), index 8
# ===> puis le nom de l’établissement (colonne B) index 1
# Le tri pourra se faire avec la fonction de tri de Python,
# prenant en argument une fonction de comparaison ad hoc.
#===> La ligne des titres doit visuellement se démarquer
#===> Les autres lignes doivent être alternativement sur fond gris clair et blanc
#
# Étant donné le nombre important de lignes du fichier csv,
# On crée un fichier HTML pour subdiviser les données du fichier csv
# et ainsi diminuer le temps de chargement
############################################################################################################
# Le tableau global a été extrait dans le module bloc1Pack.PY_functions dans la variable global_list_of_tuples_tab
# On commence par trier les données comme demandé avec la fonction de tri de python
# On supprime l'entete
global_list_of_tuples_tab_trie = b1f.global_list_of_tuples_tab[1:]
# Puis on trie
global_list_of_tuples_tab_trie = sorted(global_list_of_tuples_tab_trie,key=itemgetter(27,25,8,1))
# Le tableau global a été extrait dans le module bloc1Pack.PY_functions dans la variable global_list_of_tuples_tab
# On va le découper et récupérer les morceaux dans une liste de listes
# afin de pouvoir découper les pages HTML et diminuer le temps de chargement
# On génère 40 fichiers
nb_parts = 40
# La méthode cut_list du sous module bloc1Pack.PY_functions divise une liste
# en liste de sous-listes
lists_of_tuples_tab_trie = b1f.cut_list(global_list_of_tuples_tab_trie,nb_parts)
def create_page(filename: str,index: str):
"""Crée un fichier HTML pour chaque liste de tuples issue du découpage de l'extraction du fichier csv global.
`Paramètres`
* filename : Une chaine de caractères correspondant à lapartie commune des fichiers HTML.
* index : Une chaine de caractères contenant l'index du tuple contenant les données.
`Sorties`
* Un fichier HTML
`Notes`
Cette fonction permet de générer automatiquement les pages contenant toutes les données du fiochier csv global
et la navigation entre celles-ci.
"""
pass
# On définit les index précédents et suivants pour gérer la navigation
if (index == str(nb_parts)):
indexPrec = int(index)-1
indexSuiv = 1
elif (index == '1'):
indexPrec = nb_parts
indexSuiv = int(index)+1
else:
indexPrec = int(index)-1
indexSuiv = int(index)+1
# On crée le dossier qui va accueillir les fichiers HTML si il n'existe pas
if not os.path.exists("./pagesWeb/"):
os.mkdir("./pagesWeb/")
#On ouvre en écriture le fichier html qui va recevoir le code
fichierHTML1 = open("./pagesWeb/tableauComplet_"+index+".html", "w")
# On ajoute le doctype et le head
for elt in html_const.docTypeHeadStyle:
fichierHTML1.writelines(elt)
# On ouvre le body
fichierHTML1.writelines([
"<body>\n"
])
# On ajoute les éléments de la barre de navigation
for elt in html_const.barreDeNavigation:
fichierHTML1.writelines(elt)
fichierHTML1.writelines([
"""
<script>
// Pour aller directement à une page donnée indiquée par l'utilisateur
function directement_page(n) {
let cible = document.getElementById("nb_direct");
cible.innerHTML = `<a class="suivButton" href="./tableauComplet_${n}.html"><span>en cliquant ici !</span></a>`;
};
</script>
"""
])
# On ajoute une partie spécifique
fichierHTML1.writelines([
"<h2>TABLEAU AVEC TOUTES LES DONNÉES DU FICHIER INITIAL SUR "+str(nb_parts)+" PAGES</h2>\n",
"<h3><a class=\"precButton\" href=\"./tableauComplet_"+str(indexPrec)+".html\" target=\"_self\"><span>Vers la page "+str(indexPrec)+"</span></a> <span class=\"currentButton\"> Vous êtes page "+index+"</span> <a class=\"suivButton\" href=\"./tableauComplet_"+str(indexSuiv)+".html\" target=\"_self\"><span> Vers la page "+str(indexSuiv)+"</span></a></h3>\n",
"<h4>Changer la valeur pour aller directement à la page <input id=\"direct_input\" type=\"number\" step=\"1\" value=\""+index+"\" min=\"1\" max=\"40\" onchange=\"directement_page(this.value)\"> <span id=\"nb_direct\"></span> </h4>"
])
# On ouvre le tableau HTML
fichierHTML1.writelines([
"<table>\n",
])
# On affiche les entetes
fichierHTML1.writelines(["<tr>"])
for colonnes in b1f.global_list_of_tuples_tab[0]:
fichierHTML1.writelines(["<th>{}</th>".format(colonnes)])
fichierHTML1.writelines(["</tr>\n"])
# On affiche le reste
# compteur de ligne pour la couleur du background
cpt = 1
for lignes in lists_of_tuples_tab_trie[int(index)-1]:
if (cpt%2 == 0):
fichierHTML1.writelines(["<tr class=\"evenNthChildBackground\">"])
else:
fichierHTML1.writelines(["<tr class=\"oddNthChildBackground\">"])
cpt+=1
for colonnes in lignes:
fichierHTML1.writelines(["<td>{}</td>".format(colonnes)])
fichierHTML1.writelines(["</tr>\n"])
# On ferme le tableau HTML et le body
fichierHTML1.writelines([
"""
</table>\n
</body>\n
</html>\n
"""
])
#On ferme le fichier
fichierHTML1.close()
def main():
"""Fonction principale qui sera appelée pour générer l'ensemble des pages du site.
"""
pass
# On numérote les pages de 1 à nb_parts
for i in range(1,nb_parts+1) :
create_page("./pagesWeb/tableauComplet_",str(i))
if __name__ == "__main__":
main()
Functions
def create_page(filename: str, index: str)
-
Crée un fichier HTML pour chaque liste de tuples issue du découpage de l'extraction du fichier csv global.
Paramètres
* filename : Une chaine de caractères correspondant à lapartie commune des fichiers HTML. * index : Une chaine de caractères contenant l'index du tuple contenant les données.
Sorties
* Un fichier HTML
Notes
Cette fonction permet de générer automatiquement les pages contenant toutes les données du fiochier csv global et la navigation entre celles-ci.Expand source code
def create_page(filename: str,index: str): """Crée un fichier HTML pour chaque liste de tuples issue du découpage de l'extraction du fichier csv global. `Paramètres` * filename : Une chaine de caractères correspondant à lapartie commune des fichiers HTML. * index : Une chaine de caractères contenant l'index du tuple contenant les données. `Sorties` * Un fichier HTML `Notes` Cette fonction permet de générer automatiquement les pages contenant toutes les données du fiochier csv global et la navigation entre celles-ci. """ pass # On définit les index précédents et suivants pour gérer la navigation if (index == str(nb_parts)): indexPrec = int(index)-1 indexSuiv = 1 elif (index == '1'): indexPrec = nb_parts indexSuiv = int(index)+1 else: indexPrec = int(index)-1 indexSuiv = int(index)+1 # On crée le dossier qui va accueillir les fichiers HTML si il n'existe pas if not os.path.exists("./pagesWeb/"): os.mkdir("./pagesWeb/") #On ouvre en écriture le fichier html qui va recevoir le code fichierHTML1 = open("./pagesWeb/tableauComplet_"+index+".html", "w") # On ajoute le doctype et le head for elt in html_const.docTypeHeadStyle: fichierHTML1.writelines(elt) # On ouvre le body fichierHTML1.writelines([ "<body>\n" ]) # On ajoute les éléments de la barre de navigation for elt in html_const.barreDeNavigation: fichierHTML1.writelines(elt) fichierHTML1.writelines([ """ <script> // Pour aller directement à une page donnée indiquée par l'utilisateur function directement_page(n) { let cible = document.getElementById("nb_direct"); cible.innerHTML = `<a class="suivButton" href="./tableauComplet_${n}.html"><span>en cliquant ici !</span></a>`; }; </script> """ ]) # On ajoute une partie spécifique fichierHTML1.writelines([ "<h2>TABLEAU AVEC TOUTES LES DONNÉES DU FICHIER INITIAL SUR "+str(nb_parts)+" PAGES</h2>\n", "<h3><a class=\"precButton\" href=\"./tableauComplet_"+str(indexPrec)+".html\" target=\"_self\"><span>Vers la page "+str(indexPrec)+"</span></a> <span class=\"currentButton\"> Vous êtes page "+index+"</span> <a class=\"suivButton\" href=\"./tableauComplet_"+str(indexSuiv)+".html\" target=\"_self\"><span> Vers la page "+str(indexSuiv)+"</span></a></h3>\n", "<h4>Changer la valeur pour aller directement à la page <input id=\"direct_input\" type=\"number\" step=\"1\" value=\""+index+"\" min=\"1\" max=\"40\" onchange=\"directement_page(this.value)\"> <span id=\"nb_direct\"></span> </h4>" ]) # On ouvre le tableau HTML fichierHTML1.writelines([ "<table>\n", ]) # On affiche les entetes fichierHTML1.writelines(["<tr>"]) for colonnes in b1f.global_list_of_tuples_tab[0]: fichierHTML1.writelines(["<th>{}</th>".format(colonnes)]) fichierHTML1.writelines(["</tr>\n"]) # On affiche le reste # compteur de ligne pour la couleur du background cpt = 1 for lignes in lists_of_tuples_tab_trie[int(index)-1]: if (cpt%2 == 0): fichierHTML1.writelines(["<tr class=\"evenNthChildBackground\">"]) else: fichierHTML1.writelines(["<tr class=\"oddNthChildBackground\">"]) cpt+=1 for colonnes in lignes: fichierHTML1.writelines(["<td>{}</td>".format(colonnes)]) fichierHTML1.writelines(["</tr>\n"]) # On ferme le tableau HTML et le body fichierHTML1.writelines([ """ </table>\n </body>\n </html>\n """ ]) #On ferme le fichier fichierHTML1.close()
def main()
-
Fonction principale qui sera appelée pour générer l'ensemble des pages du site.
Expand source code
def main(): """Fonction principale qui sera appelée pour générer l'ensemble des pages du site. """ pass # On numérote les pages de 1 à nb_parts for i in range(1,nb_parts+1) : create_page("./pagesWeb/tableauComplet_",str(i))