Forum Programmation.python Demande pour que mon code python aille 1 million de fois plus vite car j'ai au moins 4 millions de f

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-6
3
fév.
2025

Bonjour,
j'aurais besoin d'aide pour que le code ci-dessous aille beaucoup beaucoup plus vite, car j'ai plus de 4 millions de fichier à exécuter avec ce code et si je le laisse tel qu'il est j'en aurais pour au moins une à 2 semaines d'exécution. Alors que je dois l'utiliser toutes les semaines. Le code fais une recherchev par rapport à mon 1er tableau et met les valeurs dans mes fichiers, fais la somme de ma recherchev, supprime les valeurs de ma recherchev et place la ligne ou il y a la somme où il doit être placé.
Ensuite il fait la même chose pour un 2ème tableau et idem pour un 3ème tableau, et pour un 4ème tableau, ça va jusqu'à 10 tableau.
S'il vous plaît, c'est complexe pour moi donc si vous pouvez m'aider. Voici le code:
import os

|| || || |import pandas as pd| |from openpyxl import load_workbook| || |# ???? Définition des chemins| |dossier_source = "D:/PYTHON/VALEUR REMPLACER ZIP"| |fichier_rebase = "D:/PYTHON/REBASE.xlsx"| || |# ???? Chargement des valeurs de REBASE.xlsx| |wb_rebase = load_workbook(fichier_rebase, data_only=True)| |ws_rebase = wb_rebase.active| || |# ???? Extraction des valeurs des Tableaux 1 (A:B), 2 (D:E), 3 (G:H) et 4 (J:K)| |tableau_1 = pd.DataFrame(ws_rebase.iter_rows(min_row=1, max_row=273, min_col=1, max_col=2, values_only=True), columns=["Clé", "Valeur"])| |tableau_2 = pd.DataFrame(ws_rebase.iter_rows(min_row=1, max_row=273, min_col=4, max_col=5, values_only=True), columns=["Clé", "Valeur"])| |tableau_3 = pd.DataFrame(ws_rebase.iter_rows(min_row=1, max_row=273, min_col=7, max_col=8, values_only=True), columns=["Clé", "Valeur"])| |tableau_4 = pd.DataFrame(ws_rebase.iter_rows(min_row=1, max_row=273, min_col=10, max_col=11, values_only=True), columns=["Clé", "Valeur"])| || |# ???? Traitement des fichiers dans le dossier source| |for fichier in os.listdir(dossier_source):| |if fichier.endswith(".xlsx"):| |chemin_fichier = os.path.join(dossier_source, fichier)| || |# ???? Charger le fichier Excel| |wb = load_workbook(chemin_fichier)| |ws = wb.active| || |# ???? Identifier la dernière ligne contenant des données (entre 1 et 19)| |last_data_row = max([i for i in range(1, 20) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))], default=1)| || |### ✅ Étape 1 : Remplacement avec le Tableau 1 (A:B)| |ligne_depart = 21| |if any(ws.cell(row=21, column=j).value for j in range(2, ws.max_column + 1)):| |ligne_depart = max([i for i in range(21, ws.max_row + 1) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))], default=20) + 2 | || |ligne_debut_bloc_1 = ligne_depart| || |# ???? Ajout des valeurs du Tableau 1| |for col in range(2, ws.max_column + 1):| |for row in range(1, last_data_row + 1):| |valeur_originale = ws.cell(row=row, column=col).value| |if valeur_originale:| |valeur_remplacee = tableau_1.loc[tableau_1["Clé"] == valeur_originale, "Valeur"]| |if not valeur_remplacee.empty:| |ws.cell(row=ligne_depart + row - 1, column=col, value=valeur_remplacee.values[0])| || |# ???? Calcul de la somme du Tableau 1| |ligne_somme_1 = ligne_depart + last_data_row + 1| |somme_bloc_1 = [sum(ws.cell(row=row, column=col).value or 0 for row in range(ligne_debut_bloc_1, ligne_somme_1) if isinstance(ws.cell(row=row, column=col).value, (int, float))) for col in range(2, ws.max_column + 1)]| || |# ???? Suppression du bloc 1 et insertion des sommes à la ligne 21| |for row in range(ligne_debut_bloc_1, ligne_somme_1):| |for col in range(2, ws.max_column + 1):| |ws.cell(row=row, column=col, value=None)| |ws.delete_rows(ligne_debut_bloc_1, ligne_somme_1 - ligne_debut_bloc_1)| |ws.insert_rows(21)| |for col_idx, somme in enumerate(somme_bloc_1, start=2):| |ws.cell(row=21, column=col_idx, value=somme)| || |### ✅ Étape 4 : Remplacement avec le Tableau 4 (J:K)| |ligne_depart = max([i for i in range(21, ws.max_row + 1) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))], default=20) + 2 | |ligne_debut_bloc_4 = ligne_depart| || |# ???? Ajout des valeurs du Tableau 4| |for col in range(2, ws.max_column + 1):| |for row in range(1, last_data_row + 1):| |valeur_originale = ws.cell(row=row, column=col).value| |if valeur_originale:| |valeur_remplacee = tableau_4.loc[tableau_4["Clé"] == valeur_originale, "Valeur"]| |if not valeur_remplacee.empty:| |ws.cell(row=ligne_depart + row - 1, column=col, value=valeur_remplacee.values[0])| || |# ???? Calcul de la somme du Tableau 4| |ligne_somme_4 = ligne_depart + last_data_row + 1| |somme_bloc_4 = [sum(ws.cell(row=row, column=col).value or 0 for row in range(ligne_debut_bloc_4, ligne_somme_4) if isinstance(ws.cell(row=row, column=col).value, (int, float))) for col in range(2, ws.max_column + 1)]| || |# ???? Suppression du bloc 4 et insertion des sommes à la ligne 24| |for row in range(ligne_debut_bloc_4, ligne_somme_4):| |for col in range(2, ws.max_column + 1):| |ws.cell(row=row, column=col, value=None)| |ws.delete_rows(ligne_debut_bloc_4, ligne_somme_4 - ligne_debut_bloc_4)| |ws.insert_rows(24)| |for col_idx, somme in enumerate(somme_bloc_4, start=2):| |ws.cell(row=24, column=col_idx, value=somme)| || |wb.save(chemin_fichier)| |print(f"✅ {fichier} mis à jour avec succès.")| || |print("✔ Tous les fichiers ont été traités correctement.")|

  • # code source python reformaté

    Posté par  . Évalué à 3 (+2/-1). Dernière modification le 03 février 2025 à 07:52.

        # conversion/reformatage avec ...GPT.
        import os
        import pandas as pd
        from openpyxl import load_workbook
    
        # Définition des chemins
        dossier_source = "D:/PYTHON/VALEUR REMPLACER ZIP"
        fichier_rebase = "D:/PYTHON/REBASE.xlsx"
    
        # Chargement des valeurs de REBASE.xlsx
        wb_rebase = load_workbook(fichier_rebase, data_only=True)
        ws_rebase = wb_rebase.active
    
        # Extraction des valeurs des tableaux
        tableaux = {
            1: pd.DataFrame(
                ws_rebase.iter_rows(min_row=1, max_row=273, min_col=1, max_col=2, values_only=True),
                columns=["Clé", "Valeur"]
            ),
            2: pd.DataFrame(
                ws_rebase.iter_rows(min_row=1, max_row=273, min_col=4, max_col=5, values_only=True),
                columns=["Clé", "Valeur"]
            ),
            3: pd.DataFrame(
                ws_rebase.iter_rows(min_row=1, max_row=273, min_col=7, max_col=8, values_only=True),
                columns=["Clé", "Valeur"]
            ),
            4: pd.DataFrame(
                ws_rebase.iter_rows(min_row=1, max_row=273, min_col=10, max_col=11, values_only=True),
                columns=["Clé", "Valeur"]
            ),
        }
    
        # Traitement des fichiers dans le dossier source
        for fichier in os.listdir(dossier_source):
            if fichier.endswith(".xlsx"):
                chemin_fichier = os.path.join(dossier_source, fichier)
    
                # Charger le fichier Excel
                wb = load_workbook(chemin_fichier)
                ws = wb.active
    
                # Identifier la dernière ligne contenant des données (entre 1 et 19)
                last_data_row = max(
                    [i for i in range(1, 20) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))],
                    default=1
                )
    
                # Étape 1 : Remplacement avec le Tableau 1
                ligne_depart = 21
                if any(ws.cell(row=21, column=j).value for j in range(2, ws.max_column + 1)):
                    ligne_depart = max(
                        [i for i in range(21, ws.max_row + 1) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))],
                        default=20
                    ) + 2
    
                ligne_debut_bloc_1 = ligne_depart
    
                # Ajout des valeurs du Tableau 1
                for col in range(2, ws.max_column + 1):
                    for row in range(1, last_data_row + 1):
                        valeur_originale = ws.cell(row=row, column=col).value
                        if valeur_originale:
                            valeur_remplacee = tableaux[1].loc[tableaux[1]["Clé"] == valeur_originale, "Valeur"]
                            if not valeur_remplacee.empty:
                                ws.cell(row=ligne_depart + row - 1, column=col, value=valeur_remplacee.values[0])
    
                # Calcul de la somme du Tableau 1
                ligne_somme_1 = ligne_depart + last_data_row + 1
                somme_bloc_1 = [
                    sum(ws.cell(row=row, column=col).value or 0 for row in range(ligne_debut_bloc_1, ligne_somme_1) if isinstance(ws.cell(row=row, column=col).value, (int, float)))
                    for col in range(2, ws.max_column + 1)
                ]
    
                # Suppression du bloc 1 et insertion des sommes à la ligne 21
                ws.delete_rows(ligne_debut_bloc_1, ligne_somme_1 - ligne_debut_bloc_1)
                ws.insert_rows(21)
                for col_idx, somme in enumerate(somme_bloc_1, start=2):
                    ws.cell(row=21, column=col_idx, value=somme)
    
                # Étape 4 : Remplacement avec le Tableau 4
                ligne_depart = max(
                    [i for i in range(21, ws.max_row + 1) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))],
                    default=20
                ) + 2
    
                ligne_debut_bloc_4 = ligne_depart
    
                # Ajout des valeurs du Tableau 4
                for col in range(2, ws.max_column + 1):
                    for row in range(1, last_data_row + 1):
                        valeur_originale = ws.cell(row=row, column=col).value
                        if valeur_originale:
                            valeur_remplacee = tableaux[4].loc[tableaux[4]["Clé"] == valeur_originale, "Valeur"]
                            if not valeur_remplacee.empty:
                                ws.cell(row=ligne_depart + row - 1, column=col, value=valeur_remplacee.values[0])
    
                # Calcul de la somme du Tableau 4
                ligne_somme_4 = ligne_depart + last_data_row + 1
                somme_bloc_4 = [
                    sum(ws.cell(row=row, column=col).value or 0 for row in range(ligne_debut_bloc_4, ligne_somme_4) if isinstance(ws.cell(row=row, column=col).value, (int, float)))
                    for col in range(2, ws.max_column + 1)
                ]
    
                # Suppression du bloc 4 et insertion des sommes à la ligne 24
                ws.delete_rows(ligne_debut_bloc_4, ligne_somme_4 - ligne_debut_bloc_4)
                ws.insert_rows(24)
                for col_idx, somme in enumerate(somme_bloc_4, start=2):
                    ws.cell(row=24, column=col_idx, value=somme)
    
                # Sauvegarde du fichier modifié
                wb.save(chemin_fichier)
                print(f"✅ {fichier} mis à jour avec succès.")
    
        print("✔ Tous les fichiers ont été traités correctement.")

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.