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.")|
mais on perd la magie des int de Python, très vite le long ne suffira pas a contenir le résultat de fib, les deux implèms ne sont donc pas comparables, l’une est rapide, l’autre est juste, meh, arrêtons de parler perfs.
J’ai envie de contribuer à Python à mon niveau, mais en allant sur le github, je suis un peu perdue pour trouver par où commencer, sachant que je ne connais pas du tout C.
from ctypes import CDLL, c_char_p
# Load the shared library
toto = CDLL("./toto.so")
toto.titi.restype = c_char_p
Et le code de test test_toto.py :
import toto
print(toto.titi())
Voilà, un truc assez basique, j’ai jeté un oeil à pas mal de tutos, et j’obtiens toujours la même erreur quand j’utilise le dernier script :
Traceback (most recent call last):
File "test_toto.py", line 1, in <module>
import toto
ImportError: dynamic module does not define module export function (PyInit_toto)
Si j’exécute la fonction titi depuis le fichier toto.py, elle est bien appelée sans souci. Mais il semble que je ne puisse pas l’appeler depuis un import.
Sur les internets ça parle de version de compilateur,… Si vous avez une idée, je suis preneur !
Être membre de l’AFPy vous permet de prendre part à la vie de l’association en votant lors de l’Assemblée Générale et vous permettez à l’APFy de financer ses frais de fonctionnement, d’engager les dépenses pour l’organisation de la PyConFR et d’assurer la promotion du langage Python en francophonie
Concernant les vidéos de la PyConFR 2024, une bonne partie est disponible sur IndyMotion : PyConFR2024 - IndyMotion
D’autres nécessitent plus de travail et sont encore en cours de traitement. Elles arriveront au fur et à mesure !
Bonjour,
je veux lancer des programmes à l’aide de radiobouton. Dans le cas d’un flatpak, il faut un certain temps pour l’ouvrir. Dans ce cas le radiobouton ne s’active qu’après la fermeture du flatpak correctement lancé. J’ai pensé que c’était une histoire de thread mais je n’y arrive visiblement pas. Un petit coup de main serait le bienvenu.