Ajout création dossier et modif modele

This commit is contained in:
David Castex 2025-03-07 08:07:07 +01:00
parent eae1be7470
commit dde2b39958
3 changed files with 39 additions and 42 deletions

View File

@ -24,5 +24,5 @@ MODE D'EMPLOI
- Dans un dossier, copier les fichiers 'script_pretraitement_dory.py' et 'modele_VISA_DORY.xlsx' - Dans un dossier, copier les fichiers 'script_pretraitement_dory.py' et 'modele_VISA_DORY.xlsx'
- Dans ce dossier, copier l'archive a traiter (ex: Riverie.zip) et décompresser l'archive - Dans ce dossier, copier l'archive a traiter (ex: Riverie.zip) et décompresser l'archive
- executer le script : Clic Droit --> Ouvrir avec ... --> Idle.exe. Puis F5 pour le démarrer - executer le script : Clic Droit --> Ouvrir avec ... --> Idle.exe. Puis F5 pour le démarrer
- Une fois terminé, un fichier de rapport 'VISA_DORY_PRE.xlsx' - Une fois terminé, un fichier de rapport 'VISA_DORY_PRE.xlsx' est créé
- L'arborescence des dossiers est aussi créé (EN COURS: les dossiers ne sont pas encore créés) - L'arborescence des dossiers est aussi créé (EN COURS: les dossiers ne sont pas encore créés)

Binary file not shown.

View File

@ -4,28 +4,11 @@
import os # getcwd(), import os # getcwd(), walk()
import openpyxl # gestion et manipulation de fichier Open XML import openpyxl # gestion et manipulation de fichier Open XML
import re # RegEx
## TODO : voir le pb des dicos qui auraient plusieurs fois les memes clés (se qui n'est pas possible) à cause de plusieurs fichiers qui auraient la meme extension
# - une liste des extensions nécessaires
NECESSAIRES = ["cpg", "dbf", "prj", "shp", "shx"]
# - une liste des extentions auxiliaires
AUXILIAIRES = ["qix", "qmd", "qml"]
# - la configuration de la feuille Excel
CONFIG = {"NOM" : "A5",
"TYPE" : "B5",
"NB_FICHIERS" : "C5",
"ENCODAGE" : "D5",
"PROJECTION" : "E5",
"VALIDITE" : "F5"}
# REPRESENTATION DES DONNEES # REPRESENTATION DES DONNEES
@ -180,7 +163,12 @@ class _Projet:
df = open(self.necessaires["prj"].chemin) df = open(self.necessaires["prj"].chemin)
chaine = df.readline() chaine = df.readline()
df.close() df.close()
if "Lambert_93" in chaine: #cherche le motif : "Ligne qui commence par PROJCS["
# puis suivi de caracteres
#puis suivi de Lambert_93"
motif = re.findall('^PROJCS[[]".*Lambert_93"', chaine)
print("motif = ", motif)
if motif:
self.projection = "LAMBERT93" self.projection = "LAMBERT93"
else: else:
print(projet.nom, " : pas de PRJ trouvé --> pas de projection définie") print(projet.nom, " : pas de PRJ trouvé --> pas de projection définie")
@ -194,7 +182,6 @@ class _Projet:
if "cpg" in self.necessaires: if "cpg" in self.necessaires:
df = open(self.necessaires["cpg"].chemin) df = open(self.necessaires["cpg"].chemin)
chaine = df.readline() chaine = df.readline()
#print("encod lu : ", chaine)
df.close() df.close()
if "UTF-8" in chaine: if "UTF-8" in chaine:
self.encodage = "UTF8" self.encodage = "UTF8"
@ -295,14 +282,14 @@ print("Racine : ".center(18), racine)
pas_de_dossier = True pas_de_dossier = True
for a in os.scandir(): for a in os.scandir():
if a.is_dir(): #si 'a' est un dossier et n'est pas un dossier de la liste ci dessous
if a.is_dir() and a.name not in ["Travail", "Livraison", ".git"]:
#il y a un dossier #il y a un dossier
pas_de_dossier = False pas_de_dossier = False
print(f"Dossier à Traiter trouvé : {a.name}") print(f"Dossier à Traiter trouvé : {a.name}")
racine = a racine = a
if pas_de_dossier: if pas_de_dossier:
print("Pas de dossier trouvé...\nFin de programme\n") print("Pas de dossier trouvé...\nFin de programme\n")
os.system("pause")
# fin du programme # fin du programme
exit() exit()
@ -334,7 +321,7 @@ for dossier_courant, list_sousdossiers, list_fichiers in os.walk(racine):
#TEST affichage de la liste de fichier #TEST affichage de la liste de fichier
# initialiser un dictionnaire de _Projets avec comme clé leurs noms respectifs # initialiser un dictionnaire de _Projets avec comme clé leurs noms respectifs
print("Init Dico\n") print("Init Dictionnaire des Projets\n")
dico = {} dico = {}
# Pour Chaque fichier de la liste Faire # Pour Chaque fichier de la liste Faire
for fichier_courant in liste: for fichier_courant in liste:
@ -353,9 +340,6 @@ for fichier_courant in liste:
# ajouter le nom comme clé dans le dictionnaire # ajouter le nom comme clé dans le dictionnaire
# associer le projet à cette clé # associer le projet à cette clé
dico[projet.nom] = projet dico[projet.nom] = projet
#test contenu du dico
# Fin Si # Fin Si
# cataloguer le fichier dans le projet concerné # cataloguer le fichier dans le projet concerné
projet.cataloguer(fichier_courant) projet.cataloguer(fichier_courant)
@ -384,23 +368,20 @@ for projet in dico.values():
# /* Ici le dictionnaire des _Projets doit être correctement remplie */ # /* Ici le dictionnaire des _Projets doit être correctement remplie */
os.system("pause")
# --produire le rapport # --produire le rapport
# créer un classeur Excel # créer un classeur Excel
# TODO pour le moment je vais partir sur un modele deja ecrit que j'ouvre # TODO pour le moment je vais partir sur un modele deja ecrit que j'ouvre
# Contrainte : l'opérateur doit placer le modèle dans le même dossier racine que le present script # Contrainte : l'opérateur doit placer le modèle dans le même dossier racine que le present script
classeur = openpyxl.load_workbook("modele_VISA_DORY.xlsx") classeur = openpyxl.load_workbook("modele_VISA_DORY.xlsx")
feuille = classeur.active feuille = classeur.active
# /* Note : peut être utiliser un modèle pré-config */ # /* Note : peut être utiliser un modèle pré-config */
# --mettre en page la première feuille du classeur # --mettre en page la première feuille du classeur
# inserer une image # inserer une image
# écrire les nom des colonnes # écrire les nom des colonnes
# écrire les formules de colorations auto des colonnes # écrire les formules de colorations auto des colonnes
cell = feuille["A2"]
cell.value = "Dossier : "+ racine.name
# Pour chaque projet du dictionnaire Faire # Pour chaque projet du dictionnaire Faire
ligne_courante = 4 ligne_courante = 4
for nom_projet, projet in dico.items(): for nom_projet, projet in dico.items():
@ -448,13 +429,38 @@ print("ligne_courante = ", ligne_courante )
# --produire le dossier de mise à disposition # --produire le dossier de mise à disposition
# créer un dossier "Travail" et un dossier "Livraison" # créer un dossier "Travail" et un dossier "Livraison"
try:
os.mkdir("Travail")
except FileExistsError as erreur:
print(erreur)
#os.mkdir("Livraison")
# --créer l'arborescence du dossier "Travail" # --créer l'arborescence du dossier "Travail"
# le dossier Travail devient le working directory # le dossier Travail devient le working directory
# créer un dossier "00-Cadastre" # créer un dossier "00-Cadastre"
try:
os.mkdir("Travail\\00-Cadastre")
except FileExistsError as erreur:
print(erreur)
# créer un dossier "01-Donnees_Valides" # créer un dossier "01-Donnees_Valides"
try:
os.mkdir("Travail\\01-Donnees_Valides")
except FileExistsError as erreur:
print(erreur)
# créer un dossier "02-Donnees_Invalides # créer un dossier "02-Donnees_Invalides
try:
os.mkdir("Travail\\02-Donnees_Invalides")
except FileExistsError as erreur:
print(erreur)
# créer un dossier "03-Production" # créer un dossier "03-Production"
try:
os.mkdir("Travail\\03-Production")
except FileExistsError as erreur:
print(erreur)
# créer un dossier "04-Verif_Geometrie" # créer un dossier "04-Verif_Geometrie"
try:
os.mkdir("Travail\\04-Verif_Geometrie")
except FileExistsError as erreur:
print(erreur)
# --peupler le dossier "Travail" # --peupler le dossier "Travail"
# Pour Chaque projet du dictionnaire Faire # Pour Chaque projet du dictionnaire Faire
# copier les fichiers des projets conforme dans le dossier "01" # copier les fichiers des projets conforme dans le dossier "01"
@ -464,12 +470,3 @@ print("ligne_courante = ", ligne_courante )
# /* Ici les dossiers doivent être correctement produit et remplie */ # /* Ici les dossiers doivent être correctement produit et remplie */
# ARRET DU PROGRAMME # ARRET DU PROGRAMME
# /* TODO Controler qu'il y a bien les 5 necessaires par projet sinon FAIL
# --> a faire dans le controle de conformité de chaque projet */
# /* TODO S'assurer que les GPKG et autres non conformes peuplent correctement
# les infos dans les projets --> géré si l'initialisation des
# projets est correctement fait */