From 6ef02b946cbf31c9f2a96b762889a1e2f7e5946c Mon Sep 17 00:00:00 2001 From: "pierre.gauthier" Date: Wed, 26 Feb 2025 09:40:43 +0100 Subject: [PATCH] Chore : adding comments --- dory_sort_out.py | 132 +++++++++++++++++++++++++++++------------------ 1 file changed, 81 insertions(+), 51 deletions(-) diff --git a/dory_sort_out.py b/dory_sort_out.py index 571bd06..d80f0ea 100644 --- a/dory_sort_out.py +++ b/dory_sort_out.py @@ -1,6 +1,7 @@ """ Sert a créer l'arborescence pour le dossier CNIG, renommer et ranger les .pdf """ + import os import re import glob @@ -39,6 +40,7 @@ KEYWORDS = { "Plan_de_secteur": FOLDERNAMES[7], } + def confirm_choice(choice) -> bool: """ 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") return False + def test_siren_insee(is_plu: bool, number: str): """teste si le numero Siren ou Insee donné est valide""" if is_plu: @@ -83,6 +86,7 @@ def test_siren_insee(is_plu: bool, number: str): print("Le numero siren est invalide") return False + def create_folders(is_plu: bool, prefixe, suffixe): """Crée l'arborescence""" 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 + def correct_file_name(file): """ - Corrige les erreurs de nomage des fichiers - espaces et tirets deviennent des underscore + Corrige les erreurs de nomage des fichiers + espaces et tirets deviennent des underscore """ basename = os.path.basename(file) - correct_file = basename.replace(" ","_").replace("-","_") + correct_file = basename.replace(" ", "_").replace("-", "_") - # Supprime les accents et les convertis en minuscules - correct_file = ''.join( - (c if unicodedata.category(c) != 'Mn' else '') - for c in unicodedata.normalize('NFD', correct_file) + # Supprime les accents et les convertis en minuscules + correct_file = "".join( + (c if unicodedata.category(c) != "Mn" else "") + for c in unicodedata.normalize("NFD", correct_file) ) - correct_file = os.path.join(os.path.dirname(file),correct_file) - os.rename(file,correct_file) + correct_file = os.path.join(os.path.dirname(file), correct_file) + os.rename(file, correct_file) return correct_file + def sort_files(prefixe, suffixe, sort_path): - """ - Range les fichiers dans l'arborescence, selon des mots clefs - Renvoi un dictionaire avec tous les noms de fichiers trouvés et leur compte + """ + Range les fichiers dans l'arborescence, selon des mots clefs + Renvoi un dictionaire avec tous les noms de fichiers trouvés et leur compte """ # cherche tous les fichiers pdf présents dans l'arborescence # à partir du Current working directory, # y compris ceux dans des dossiers 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} folders_file_count = [0] * len(FOLDERNAMES) for file in files: no_keyword = True - #corrige les erreur de nommage de fichiers + # corrige les erreur de nommage de fichiers file = correct_file_name(file) 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(): - keyword_count[keyword] +=1 + keyword_count[keyword] += 1 filename = keyword if keyword_count[keyword] > 1: # Le nouveau nom du fichier filename += "_" + str(keyword_count[keyword] - 1) - # Le dossier de destination du fichier + # Le dossier de destination du fichier new_path = sort_path + "/" + folder # Le nouveau nom du fichier renamed = os.path.join( 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) shutil.move(renamed, new_path) 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, # on l'envoi dans le dossier Annexes 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() - #on ajoute le nom du fichier dans le dictionnaire + # on ajoute le nom du fichier dans le dictionnaire if not filename in keyword_count: - keyword_count.update({filename:1}) + keyword_count.update({filename: 1}) else: keyword_count[filename] += 1 filename += "_" + str(keyword_count[filename] - 1) renamed = os.path.join( os.path.dirname(file), - prefixe - + "_" - + filename - + "_" - + suffixe - + ".pdf", + prefixe + "_" + filename + "_" + suffixe + ".pdf", ) os.rename(file, renamed) shutil.move(renamed, sort_path + "/" + FOLDERNAMES[ANNEXE_FOLDER_ID]) folders_file_count[ANNEXE_FOLDER_ID] += 1 - return keyword_count, folders_file_count + return folders_file_count # 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 - error_color = PatternFill(patternType='solid',fgColor='00cb4335') - column_name_color = PatternFill(patternType='solid',fgColor='0085929e') - row_color = PatternFill(patternType='solid',fgColor='00ccd1d1') + # Couleurs de cellules + error_color = PatternFill(patternType="solid", fgColor="00cb4335") + column_name_color = PatternFill(patternType="solid", fgColor="0085929e") + row_color = PatternFill(patternType="solid", fgColor="00ccd1d1") report = xls.Workbook() report_worsheet = report.active + + # Nomme la worksheet et les colonnes du tableau report_worsheet.title = "Compte rendu" - report_worsheet['B1'] = "Dossiers" - report_worsheet['C1'] = "NB Fichiers" - report_worsheet['D1'] = "Rapport d'erreur" + report_worsheet["B1"] = "Dossiers" + report_worsheet["C1"] = "NB Fichiers" + report_worsheet["D1"] = "Rapport d'erreur" - report_worsheet.column_dimensions['B'].width *= 3 - report_worsheet.column_dimensions['C'].width *= 3 - report_worsheet.column_dimensions['D'].width *= 3 + # Triple la largeur des colonnes pour plus de clarté + report_worsheet.column_dimensions["B"].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 + + # 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): - report_worsheet['B'+ str(currrent_cell)] = FOLDERNAMES[i] - report_worsheet['C'+ str(currrent_cell)] = content + report_worsheet["B" + str(currrent_cell)] = FOLDERNAMES[i] + report_worsheet["C" + str(currrent_cell)] = content + + # 1 ligne sur 2 change de couleur 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: - report_worsheet['D'+ str(currrent_cell)] = "/!\\ aucun fichier dans le dossier /!\\" - report_worsheet['D'+ str(currrent_cell)].fill = error_color - currrent_cell+=1 + report_worsheet["D" + str(currrent_cell)] = ( + "/!\\ aucun fichier dans le dossier /!\\" + ) + report_worsheet["D" + str(currrent_cell)].fill = error_color + currrent_cell += 1 report.save("Rapport.xlsx") + def sortout(): """Classe le dossier voulu selon les donées renseignées par l'utilisateur""" is_plu = True @@ -254,8 +278,14 @@ def sortout(): # On demande le numero INSEE ou SIREN tant que l'input est invalide while True: - print("numero INSEE (Format 5 chiffres): " - if is_plu else "numero siren (Format 9 chiffres): ", end="") + print( + ( + "numero INSEE (Format 5 chiffres): " + if is_plu + else "numero siren (Format 9 chiffres): " + ), + end="", + ) prefixe = input() if test_siren_insee(is_plu, prefixe) and confirm_choice(prefixe): break @@ -269,6 +299,6 @@ def sortout(): 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)