Archives de catégorie : Non classé

Manipulation de fichier Excel : utilisez Python

Le besoin était simple, à partir d’un fichier de vente global à une société, il fallait proposer un fichier spécifique par commercial pour qu’il puisse saisir son prévisionnel propre à chacun de ses clients … puis proposer un outil permettant de réaliser la synthèse de ses documents particuliers.

La manipulation de fichier Excel via openpyxl

Les fonctions de base :

L’ouverture d’un fichier excel avec cette libraire se fait comme dans la vraie vie. Il faut ouvrir le fichier : load_workbook puis sélectionner l’onglet dans lequel on souhaite travailler . Les onglets sont stockés sous forme de dictionnaire, il suffit de donc le charger en utilisant comme clé le nom de l’onglet workbook[‘nomOnglet’].

Lire une valeur : Il suffit de repartir de l’objet utilisé pour récupérer l’onglet. Les cellules sont atteignables via le couple Ligne/colonne. Par exemple, pour récupérer la valeur en F13, il suffit de faire : val = onglet[‘F13’].value

def getValueNumerique(ong, key):    
   valT = 0    
   val  = ong[key].value    
   if (isinstance(val, Number)):
      valT =  val   
return valT

Enregistrer une valeur peut être réaliser en faisant une simple affectation : onglet[‘F13’] = val

Ajouter/dupliquer un onglet :         wb.copy_worksheet(wb[‘CC’])

Enregistrer le fichier final : wb.save(« nouveauNom »)

De un vers plusieurs : Python via Panda pour un éclatement rapide

La difficulté la plus grande est de trouver l’élément sur lequel vos filtres vont pouvoir s’appuyer. Dans mon contexte, chaque vente était relié à son représentant. La sélection des données fut donc de :

  • Filtrer sur la période de temps souhaité :         listeCommade38_2018 =   df_filtre_soc[( (df_filtre_soc[« MOIS_FACT »] >= 201800.) & (df_filtre_soc[« MOIS_FACT »] <= 201900.)  )]
  • Puis, après construit la liste des représentants, boucler dessus afin de ne traiter que les ventes du représentant en cours de traitement :     df_filtre = df[(df[« CODE_REPRESENTANT »] == representant_ref)]
  • Dans certain cas, nous n’avons pas besoin que d’une valeur, mais d’une combinaison de valeur. Dans ce cas, la fonction query facilite les regroupements d’information :   m2019 =   (liste_2019_cc_filtre.query(‘@pp.liste_ref in CODE_ART’))[« QTE_EXPE »]
  • On peut ensuite appliquer des fonctions sur le résultat obtenu : nbProd_2019 = m2019.sum()

De plusieurs vers un : une simple routine en Python

Tout aussi simple. Pour identifier l’ensemble des fichiers résultats, la commande glob.glob(path) permet de retrouver un ensemble de fichier correspondant à un dossier et possédant un pattern exploitable.

Ensuite, il suffit d’ouvrir chacun des fichiers, de retrouver l’onglet de synthèse, puis de lire les données calculée via macro. Attention, afin d’avoir la valeur et non la méthode de la macro, il faut passer des arguments à la fonction d’ouverture de document excel :     wb = load_workbook(fich, read_only=False, keep_vba=True,  data_only=True).

Dans mon cas, les données étant réparties en fonction d’un template fixe, j’ai préféré passer par un dictionnaire pour faciliter l’identification des données à consulter :

totaux ={
    'F7' : 0,
    'F8' : 0,
    'F9' : 0,
    'F13' : 0,
    'F14' : 0,
    'F15' : 0,
    'F16' : 0
}

Il suffit ensuite de boucler sur le dictionnaire, pour réaliser, en une boucle, la lecture de l’ensemble des données :

def rechercheOngletSynthese(wb, sommeTige):
    synth =  wb['Synthese']

    for key in totaux:
        val  = synth[key].value  

Une fois les valeurs obtenues, il n’y a plus qu’à construire le fichier résultat (basé une fois de plus sur un template excel.

wb = load_workbook(fichR, read_only=False, keep_vba=True,  data_only=True)

# On va dans l'onglet synthèse
synth =  wb['Synthese']
for key in totaux:
    synth[key] = totaux[key]

sauvegarde_finale('resultat2019.xls' , wb)

Au final, avec deux scripts, nous pouvons automatiser la génération des fichiers à faire remplir, puis la construction de la synthèse. Le temps de développement est relativement cours (le plus long fut la prise du résultat à produire). De plus, le résultat pouvant être produit à la demande, il est très simple de fournir des résultats intermédiaire … le temps que l’ensemble des fichiers reviennent après leur saisie.

Liste des imports utiles :

import csv
import pandas as pd
import produit 
import  re as Regex

#Pour le traitement des fichiers excels
from openpyxl import Workbook
from openpyxl import load_workbook
#Pour la vérification des nombres
from numbers import Number

# Pour les fichiers
import os.path
import glob
from pathlib import Path

import unicodedata

Url :

https://pypi.org/project/openpyxl/

https://pandas.pydata.org/

Installation de Retroshare sur Debian Sid

Quand des paquets sont disponibles pour d’anciennes versions ou pour d’autre distribution, il est souvent plus souvent de corriger la liste de dépendance d’un paquet plutôt que de le reconstruire de but en blanc.
Cette technique possède toutefois une contrainte importante, il est possible que les évolutions des dépendances aient des conséquences importantes sur les fonctionnalités de l’application. Néanmoins, pour des utilisations classiques, ou sous réserve de tests complémentaires, le gain de temps est très appréciable.

la démarche est la suivante :

En un, décompresser le paquet debian ainsi que sa liste de contrôle:


dpkg-deb -x retroshare_0.5.5-0.7068~wheezy_amd64.deb dir_tmp
dpkg-deb --control retroshare_0.5.5-0.7068~wheezy_amd64.deb dir_tmp/DEBIAN

Il faut ensuite mettre à jour les dépendances pouvant poser problèmes (nouvelle version disponible, renommage … )

Edition du fichier de contrôle :


vi dir_tmp/DEBIAN/control

Dans le cas de rétroshare,le problème se situe sur la dépendance suivante : libprotobuf7 qui n’est maintenant plus disponible en version testing.


Depends: libbz2-1.0, libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libglib2.0-0 (>= 2.12.0), libgnome-keyring0 (>= 2.22.2), libprotobuf9, libqt4-network (>= 4:4.5.3), libqt4-script (>= 4:4.5.3), libqt4-xml (>= 4:4.5.3), libqtcore4 (>= 4:4.8.0), libqtgui4 (>= 4:4.8.0), libssl1.0.0 (>= 1.0.0), libstdc++6 (>= 4.6), libupnp6 (>= 1:1.6.13), libx11-6, libxss1, zlib1g (>= 1:1.1.4), gnome-keyring

=> Remplacer le libprotobuf7 par libprotobuf9

Il suffit ensuite de reconstruire le paquet via la commande suivante pour avoir un paquet directement installable via les commandes classiques.

Reconstruction du paquet :


dpkg -b dir_tmp retroshare_0.5.5-0.7068~wheezy_amd64.deb

et il est maintenant possible de l’installer.

Ps : Ce post est une adaptation de Install Pencil on Debian qui traite du même problème pour une application différente.

Mise à jour de wordpress

Depuis quelques temps, les mises à jours automatiques ne se faisait plus pour raison de mémoire, et là,
je n’ai pas fait attention à qui à changer ses pré-requis mais elle est passée.

Avec cette mise à jour et la suppression de tous les commentaires non-validés (rien de moins que 50 000), c’est peut être l’occasion de relancer ce blog

A bienôt.

Résumé des tweets de la semaine

Article pas très original mais qui me permet de faire le point sur les diverses infos que j’ai relayé cette semaine.

Sauget Marc ‏@marcSauget
Pub inside : Save 50% on all ebooks and videos, 40% on all print books http://oreil.ly/RvYxcT

4 Sept Sauget Marc ‏@marcSauget
@jugedadouche @Maitre_Eolas Shit ou situation sociales ? Il suffit de croiser des Djeuns (sans shit) pour avoir déjà très peur …

3 Sept Sauget Marc ‏@marcSauget
Encore quelques mois à ce rythme et je me transforme en un Hudson à moi à tout seul 🙁

Le conducteur était ivre, avait fumé du cannabis et n’avait plus le permis. http://franche-comte.france3.fr/2012/08/29/accident-de-pomoy-le-conducteur-etait-ivre-et-avait-consomme-du-cannabis-64491.html …” : sélection naturelle ???

28 Août Sauget Marc ‏@marcSauget
Test Astah Community sur un projet perso … c’est con que la génération de code soit absente de cette version #fail #UML #test

Post Bookmaks, de tous et de rien, mais surtout de rien

Histoire de mettre un peu de vie sur ce site … désolant mort, voici quelques liens divers et variés :

Dans la rubrique moto :
le contrôle technique semble est remis à plus tard … en espérant que le plus tard soit jamais car le défaut technique n’intervient que rarement comme cause dans les accidents motos (de l’ordre du pourcent) par contre il pourrait revenir par l’aspect écologie … Je ne suis pas contre l’écologie, mais bon, des contrôles sur route par les forces de l’ordre, c’est aussi possible, moins systématique (mais moins source de revenu aussi … )

D’un point de vue sécurité routière, la chasuble est oublié .. mais revient sous la forme d’un timbre poste (150 cm2) à avoir entre le coup et les hanches … encore un truc inutile ..servant juste à ne pas perdre la face … politique de m …

Niveau nouveauté sympa, un casque branché sur un accéléromètre

http://www.moto-net.com/breve.php?RefBreve=4577

[ad#Google Adsense]

Niveau informatique, que du vieux en ce qui me concerne, les évaluations de technologie prennent leur temps, et niveau recherche je n’en parle pas, pour le moment, même lecture d’article me semble loin ….

Manque de souffle

Ce blog n’a jamais été très régulier, mais là,j’avoue qu’il manque cruellement de mise à jour. Un nouveau job, une nouvelle thématique … tout en n’essayant de poursuivre en à coté des activités de recherche, cela prend du temps et cela n’en laisse plus beaucoup au reste …

Comme on dit, cela commence à se poser et je vais bientôt pouvoir reprendre une petite activité de publication ici même.

[ad#Google Adsense]

Dans les tuyaux, beaucoup de découverte en ce qui me concerne, que se soit :
– d’un point vue OS, puisque je travailles sous Mac depuis début septembre.
– d’un point de vue technologie car mon nouvel emploi dans le développement d’application WEB me permet d’approfondir un pan complet de l’informatique, que je n’utilisais que peu jusqu’à peu de temps.
– d’un point de vue recherche, avec l’accomplissement d’une nouvelle étude sur la décomposition de domaine pour l’apprentissage de réseau de neurones, mais aussi, avec surement dans peu de temps, une nouvelle version d’EgsToolkit afin publier les dernières modifications de ce logiciel.

A bientôt

Nouvelle version de mon CV

Ingénieur d’Etude et de développement :
Sauget Marc

Compétences informatiques

Environnements GNU Linux (Debian), Windows
Langages C/C++, Java/J2EE, LaTeX
Script Perl, Bash
Tech. Web HTML/CSS, JavaScript, PHP/MySql
Parallélisme MPI, PM2, CUDA, OpenMP, Threading Building Blocks
IDE Eclipse, Visual C++, emacs
Débuggeur DevPartner, Valgrind, gprof
Bureautique OpenOffice.org, Office, Latex
Logiciels div. Qt-Designer, gnuplot, OAR, The Gimp, skencil
IHM Qt-Trolltech, Java Swing