Chore : adding comments

This commit is contained in:
pierre.gauthier 2025-02-26 09:40:43 +01:00
parent 8d8987ee15
commit 6ef02b946c

View File

@ -1,6 +1,7 @@
""" """
Sert a créer l'arborescence pour le dossier CNIG, renommer et ranger les .pdf Sert a créer l'arborescence pour le dossier CNIG, renommer et ranger les .pdf
""" """
import os import os
import re import re
import glob import glob
@ -39,6 +40,7 @@ KEYWORDS = {
"Plan_de_secteur": FOLDERNAMES[7], "Plan_de_secteur": FOLDERNAMES[7],
} }
def confirm_choice(choice) -> bool: def confirm_choice(choice) -> bool:
""" """
Demande confirmation du choix de l'utilisateur Demande confirmation du choix de l'utilisateur
@ -68,6 +70,7 @@ def test_date(date_input: str):
print("Erreur de frappe, la date ne noit contenir que 8 chiffres") print("Erreur de frappe, la date ne noit contenir que 8 chiffres")
return False return False
def test_siren_insee(is_plu: bool, number: str): def test_siren_insee(is_plu: bool, number: str):
"""teste si le numero Siren ou Insee donné est valide""" """teste si le numero Siren ou Insee donné est valide"""
if is_plu: if is_plu:
@ -83,6 +86,7 @@ def test_siren_insee(is_plu: bool, number: str):
print("Le numero siren est invalide") print("Le numero siren est invalide")
return False return False
def create_folders(is_plu: bool, prefixe, suffixe): def create_folders(is_plu: bool, prefixe, suffixe):
"""Crée l'arborescence""" """Crée l'arborescence"""
main_path = f"{prefixe}_PLU{"i" if not is_plu else ""}_{suffixe}" main_path = f"{prefixe}_PLU{"i" if not is_plu else ""}_{suffixe}"
@ -111,60 +115,65 @@ def create_folders(is_plu: bool, prefixe, suffixe):
return main_path return main_path
def correct_file_name(file): def correct_file_name(file):
""" """
Corrige les erreurs de nomage des fichiers Corrige les erreurs de nomage des fichiers
espaces et tirets deviennent des underscore espaces et tirets deviennent des underscore
""" """
basename = os.path.basename(file) basename = os.path.basename(file)
correct_file = basename.replace(" ","_").replace("-","_") correct_file = basename.replace(" ", "_").replace("-", "_")
# Supprime les accents et les convertis en minuscules # Supprime les accents et les convertis en minuscules
correct_file = ''.join( correct_file = "".join(
(c if unicodedata.category(c) != 'Mn' else '') (c if unicodedata.category(c) != "Mn" else "")
for c in unicodedata.normalize('NFD', correct_file) for c in unicodedata.normalize("NFD", correct_file)
) )
correct_file = os.path.join(os.path.dirname(file),correct_file) correct_file = os.path.join(os.path.dirname(file), correct_file)
os.rename(file,correct_file) os.rename(file, correct_file)
return correct_file return correct_file
def sort_files(prefixe, suffixe, sort_path): def sort_files(prefixe, suffixe, sort_path):
""" """
Range les fichiers dans l'arborescence, selon des mots clefs Range les fichiers dans l'arborescence, selon des mots clefs
Renvoi un dictionaire avec tous les noms de fichiers trouvés et leur compte Renvoi un dictionaire avec tous les noms de fichiers trouvés et leur compte
""" """
# cherche tous les fichiers pdf présents dans l'arborescence # cherche tous les fichiers pdf présents dans l'arborescence
# à partir du Current working directory, # à partir du Current working directory,
# y compris ceux dans des dossiers # y compris ceux dans des dossiers
files = glob.glob(os.getcwd() + "/**/*.pdf", recursive=True) files = glob.glob(os.getcwd() + "/**/*.pdf", recursive=True)
#compte le nombre de fois mot clef apparait # compte le nombre de fois mot clef apparait
keyword_count = {key: 0 for key in KEYWORDS} keyword_count = {key: 0 for key in KEYWORDS}
folders_file_count = [0] * len(FOLDERNAMES) folders_file_count = [0] * len(FOLDERNAMES)
for file in files: for file in files:
no_keyword = True no_keyword = True
#corrige les erreur de nommage de fichiers # corrige les erreur de nommage de fichiers
file = correct_file_name(file) file = correct_file_name(file)
for keyword, folder in KEYWORDS.items(): for keyword, folder in KEYWORDS.items():
# Si le mot clef (en minuscule) est dans le nom du fichier (en minuscule)
if keyword.lower() in file.lower(): if keyword.lower() in file.lower():
keyword_count[keyword] +=1 keyword_count[keyword] += 1
filename = keyword filename = keyword
if keyword_count[keyword] > 1: if keyword_count[keyword] > 1:
# Le nouveau nom du fichier # Le nouveau nom du fichier
filename += "_" + str(keyword_count[keyword] - 1) filename += "_" + str(keyword_count[keyword] - 1)
# Le dossier de destination du fichier # Le dossier de destination du fichier
new_path = sort_path + "/" + folder new_path = sort_path + "/" + folder
# Le nouveau nom du fichier # Le nouveau nom du fichier
renamed = os.path.join( renamed = os.path.join(
os.path.dirname(file), os.path.dirname(file),
prefixe + "_" + filename + "_" + suffixe + ".pdf",) prefixe + "_" + filename + "_" + suffixe + ".pdf",
)
folders_file_count[int(folder[0])] +=1 folders_file_count[int(folder[0])] += 1
os.rename(file, renamed) os.rename(file, renamed)
shutil.move(renamed, new_path) shutil.move(renamed, new_path)
no_keyword = False no_keyword = False
@ -172,68 +181,83 @@ def sort_files(prefixe, suffixe, sort_path):
# si aucun mot clef n'a été trouvé dans le nom du fichier, # si aucun mot clef n'a été trouvé dans le nom du fichier,
# on l'envoi dans le dossier Annexes # on l'envoi dans le dossier Annexes
if no_keyword: if no_keyword:
#on s'assure que le nom commence par une majuscule # on s'assure que le nom commence par une majuscule
filename = os.path.splitext(os.path.basename(file))[0].capitalize() filename = os.path.splitext(os.path.basename(file))[0].capitalize()
#on ajoute le nom du fichier dans le dictionnaire # on ajoute le nom du fichier dans le dictionnaire
if not filename in keyword_count: if not filename in keyword_count:
keyword_count.update({filename:1}) keyword_count.update({filename: 1})
else: else:
keyword_count[filename] += 1 keyword_count[filename] += 1
filename += "_" + str(keyword_count[filename] - 1) filename += "_" + str(keyword_count[filename] - 1)
renamed = os.path.join( renamed = os.path.join(
os.path.dirname(file), os.path.dirname(file),
prefixe prefixe + "_" + filename + "_" + suffixe + ".pdf",
+ "_"
+ filename
+ "_"
+ suffixe
+ ".pdf",
) )
os.rename(file, renamed) os.rename(file, renamed)
shutil.move(renamed, sort_path + "/" + FOLDERNAMES[ANNEXE_FOLDER_ID]) shutil.move(renamed, sort_path + "/" + FOLDERNAMES[ANNEXE_FOLDER_ID])
folders_file_count[ANNEXE_FOLDER_ID] += 1 folders_file_count[ANNEXE_FOLDER_ID] += 1
return keyword_count, folders_file_count return folders_file_count
# return True # return True
def error_report(file_data,folder_data):
def error_report(folder_data):
""" """
Crée le rapport d'utilisation du script Crée le rapport d'utilisation du script
""" """
#Couleur rouge # Couleurs de cellules
error_color = PatternFill(patternType='solid',fgColor='00cb4335') error_color = PatternFill(patternType="solid", fgColor="00cb4335")
column_name_color = PatternFill(patternType='solid',fgColor='0085929e') column_name_color = PatternFill(patternType="solid", fgColor="0085929e")
row_color = PatternFill(patternType='solid',fgColor='00ccd1d1') row_color = PatternFill(patternType="solid", fgColor="00ccd1d1")
report = xls.Workbook() report = xls.Workbook()
report_worsheet = report.active report_worsheet = report.active
# Nomme la worksheet et les colonnes du tableau
report_worsheet.title = "Compte rendu" report_worsheet.title = "Compte rendu"
report_worsheet['B1'] = "Dossiers" report_worsheet["B1"] = "Dossiers"
report_worsheet['C1'] = "NB Fichiers" report_worsheet["C1"] = "NB Fichiers"
report_worsheet['D1'] = "Rapport d'erreur" report_worsheet["D1"] = "Rapport d'erreur"
report_worsheet.column_dimensions['B'].width *= 3 # Triple la largeur des colonnes pour plus de clarté
report_worsheet.column_dimensions['C'].width *= 3 report_worsheet.column_dimensions["B"].width *= 3
report_worsheet.column_dimensions['D'].width *= 3 report_worsheet.column_dimensions["C"].width *= 3
report_worsheet.column_dimensions["D"].width *= 3
report_worsheet['B1'].fill = report_worsheet['C1'].fill = report_worsheet['D1'].fill = column_name_color # Applique la couleur de fond aux cellules titres de colonnes
report_worsheet["B1"].fill = report_worsheet["C1"].fill = report_worsheet[
"D1"
].fill = column_name_color
#on commence à la cellule 2
currrent_cell = 2 currrent_cell = 2
# Pour chaque dossiers
# On écrit son nom dans la colonne B
# On écris le nombre de fichier contenus dans la colonne C
# Si vide Erreur Colonne D
for i, content in enumerate(folder_data): for i, content in enumerate(folder_data):
report_worsheet['B'+ str(currrent_cell)] = FOLDERNAMES[i] report_worsheet["B" + str(currrent_cell)] = FOLDERNAMES[i]
report_worsheet['C'+ str(currrent_cell)] = content report_worsheet["C" + str(currrent_cell)] = content
# 1 ligne sur 2 change de couleur
if i % 2 == 0: if i % 2 == 0:
report_worsheet['B'+ str(currrent_cell)].fill = report_worsheet['C'+ str(currrent_cell)].fill = report_worsheet['D'+ str(currrent_cell)].fill = row_color report_worsheet["B" + str(currrent_cell)].fill = report_worsheet[
"C" + str(currrent_cell)
].fill = report_worsheet["D" + str(currrent_cell)].fill = row_color
if content == 0: if content == 0:
report_worsheet['D'+ str(currrent_cell)] = "/!\\ aucun fichier dans le dossier /!\\" report_worsheet["D" + str(currrent_cell)] = (
report_worsheet['D'+ str(currrent_cell)].fill = error_color "/!\\ aucun fichier dans le dossier /!\\"
currrent_cell+=1 )
report_worsheet["D" + str(currrent_cell)].fill = error_color
currrent_cell += 1
report.save("Rapport.xlsx") report.save("Rapport.xlsx")
def sortout(): def sortout():
"""Classe le dossier voulu selon les donées renseignées par l'utilisateur""" """Classe le dossier voulu selon les donées renseignées par l'utilisateur"""
is_plu = True is_plu = True
@ -254,8 +278,14 @@ def sortout():
# On demande le numero INSEE ou SIREN tant que l'input est invalide # On demande le numero INSEE ou SIREN tant que l'input est invalide
while True: while True:
print("numero INSEE (Format 5 chiffres): " print(
if is_plu else "numero siren (Format 9 chiffres): ", end="") (
"numero INSEE (Format 5 chiffres): "
if is_plu
else "numero siren (Format 9 chiffres): "
),
end="",
)
prefixe = input() prefixe = input()
if test_siren_insee(is_plu, prefixe) and confirm_choice(prefixe): if test_siren_insee(is_plu, prefixe) and confirm_choice(prefixe):
break break
@ -269,6 +299,6 @@ def sortout():
main_path = create_folders(is_plu, prefixe, suffixe) main_path = create_folders(is_plu, prefixe, suffixe)
donees_fichiers, donnees_dossiers = sort_files(prefixe, suffixe, main_path) donnees_dossiers = sort_files(prefixe, suffixe, main_path)
error_report(donees_fichiers,donnees_dossiers) error_report(donnees_dossiers)