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,23 +115,25 @@ 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
@ -138,20 +144,22 @@ def sort_files(prefixe, suffixe, sort_path):
# 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
@ -162,9 +170,10 @@ def sort_files(prefixe, suffixe, sort_path):
# 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)