Formation Archives - Content Gardening Studio

Formation

Gestion des dépendances d’une application

Le développement de toute application, peu importe son but, nécessite généralement l’implémentation de fonctionnalités ou services standards tels que les logs applicatifs, les accès aux à bases de données, la manipulation des chaînes de caractères, les mécanismes de cryptographie, les fichiers de configuration, la gestion des écritures dans les fichiers, les dépendances, etc.
Ainsi, pour nous aider dans notre travail lié au développement et à la livraison d’applications, des outils et mécanismes particuliers sont mis en œuvre. Ceux-ci doivent donc prendre en compte un certain nombre de contraintes et exigences.
Nous allons présenter les trois principales contraintes qui conditionnent le bon fonctionnement des bibliothèques et des applications qui s’en servent.

Intégration aisée des bibliothèques

L’intégration des bibliothèques n’est pas toujours une tâche facile lors du développement d’une application.
Avec C/C++ la tâche est relativement difficile. Il faut donc commencer par l’installation des bibliothèques « .so » et des en-têtes « .h » nécessaires. Aussi, avec les langages comme Java ou Python, la tâche est facilitée. Pour cause, la portabilité des différents emplacements de l’installation.

Gestion des dépendances transitives

Un autre problème est celui de la gestion des dépendances transitives. Bien que le besoin d’utiliser des bibliothèques est évident pour les développeurs, ils doivent garder à l’esprit que celles-ci peuvent être liées par une interdépendance.

Une fois encore, la tâche est un peu moins facile avec C/C++. Le gestionnaire de paquets pourra installer tout le nécessaire si le packaging de la dépendance a été fait correctement. Le cas échéant, le développeur passe par long processus de recherche d’erreurs au moyen des exécutions du programme « make » à chaque niveau de dépendance.
Par contre, avec les autres langages, on s’en sort un peu plus facilement : Chaque bibliothèque (ou « module » par exemple si on pense au cas de Python) de dépendance, fournit un fichier particulier. Dan ce dernier, il y a l’indication de ses propres dépendances. Ensuite, de manière récursive, l’outil (par exemple, maven pour Java ou pip pour Python) s’occupe du rapatriement du nécessaire.

Isolation des applications

Pour deux applications différentes utilisant une bibliothèque commune, chacune évoluant dans le temps, on peut se retrouver avec deux cas de figures:
• une incompatibilité entre deux versions de la même application,
• une incompatibilité entre les deux applications.
Comme avec les points précédents, il est très difficile d’installer deux versions d’une même librairie avec C/C++. Dans des contextes tels que PHP, Python ou Javascript/NodeJS, il est possible de le faire avec les standards intégrés. Ainsi, ces derniers prennent le relai et opèrent le chargement des bibliothèques compatibles pour le projet.

Par ailleurs, avec Python, l’outil essentiel qui nous aide à garantir l’isolation des applications est son module intégré « venv » (anciennement l’outil tierce-partie nommé « virtualenv »). Il vous permet de créer des environnements virtuels. Aussi, chaque application peut fonctionner sans risque avec l’interpréteur Python et l’ensemble des dépendances embarquées. En l’occurrence (typiquement les modules installés au sein du répertoire « site-packages » spécifique de l’environnement en question). Regardez cette vidéo où nous faisons une démonstration de cette pratique dans le contexte du framework Django.

Que retenir ?

La gestion des dépendances est devenue une tâche incontournable spécifiquement sur les applications complexes. Les langages tels que PHP, Python et JavaScript, ceux que nous utilisons essentiellement chez Content Gardening Studio, ont tenu compte de certaines contraintes. Aussi, ils ont fait des efforts pour intégrer des mécanismes pour l’utilisation de dépendances externes. Avec Python en particulier, il y a un duo que le développeur doit prendre l’habitude d’utiliser, pour faciliter son travail : pip et venv. Regardez cette autre vidéo sur les pratiques liées à la gestion des dépendances.

Manipulation des formats de fichiers – Partie 1

Travailler de nos jours sur les différentes plateformes numériques requiert l’utilisation de nombreux formats de fichiers. En effet, manipulés par des applications ou des logiciels, ceux-ci contiennent des données que nous pouvons lire et analyser, ou que nous pouvons être amenés à mettre à jour.
Dans ce premier article d’une série sur les formats de fichiers, nous faisons une revue des formats « texte » que nous rencontrons le plus souvent dans les projets de nos clients, et nous vous montrons comment les manipuler avec Python. Dans les articles suivants, nous verrons le cas des fichiers de données tabulaires, celui des fichiers bureautiques, et pour finir, les autres types de fichiers qu’il est intéressant de savoir manipuler.

Si vous souhaitez utiliser cet article de manière pratique, il est accompagné d’un notebook Jupyter et des fichiers de données des exemples présentés.
Vous retrouverez tous les éléments dans notre dépôt Github ici : https://github.com/ContentGardeningStudio/learning
_text_files_manipulation
Pour en savoir plus sur l’environnement d’exécution interactif Jupiyper et les notebooks, voir : https://jupyter.org/documentation

Le texte simple

Encore appelé fichier texte brut, le fichier texte simple est un document dont le contenu est exclusivement une suite de caractères. Ainsi, pour être précis, nous parlons ici des caractères imprimables, des caractères d’espace et du retour à la ligne.
Le fichier texte utilise nécessairement une forme spécifique de codage des caractères pouvant être une extension du standard des Etats-Unis, l’ASCII.

Ce type de fichier est généralement créé avec l’extension .txt ou .text, mais ce n’est pas obligatoire. Souvent, les ingénieurs ou administrateurs « système » manipulent des fichiers journaux (ou logs), générés par des logiciels sur des serveurs, et ayant des extensions différentes selon le logiciel.

D’ailleurs, pour le programmeur, l’extension n’est pas l’élément important ; votre programme peut avoir en entrée des fichiers générés par un logiciel ou une API, qui ont une extension inhabituelle, voire qui n’ont pas d’extension du tout.
Pour ouvrir un fichier texte existant sur votre machine, en lecture seule, nous utilisons la fonction « open() » en lui passant le chemin du fichier et le mode d’ouverture, ici la valeur ‘rt’ (avec ‘r’ pour Read et ‘t’ pour texte) ; cela retourne un objet représentant le fichier en cours de manipulation, et on peut lire son contenu via la méthode « read() » de cet objet. De plus, l’utilisation de l’élément de syntaxe « with » garantit que le fichier sera fermé après l’opération, donc la mémoire de la machine nettoyée, ce qui est important pour ne pas occuper de la mémoire inutilement.

Pour ouvrir un fichier texte en écriture, ce qui est valable que ce soit pour mettre à jour un fichier existant ou pour le créer, nous utilisons la variante avec la valeur ‘wt’ pour le mode et la méthode « write() » de l’objet représentant le fichier permet de passer la chaîne de caractère à écrire dans le fichier.

Sachez que nous avons également l’indicateur de mode ‘a’ (pour « append »), ce qui donne ‘at’ pour le texte, utile lorsque vous voulez ajouter du texte à la suite de l’existant.

Le HTML

Le format HyperText Markup Language (HTML) est le standard utilisé pour la création de sites web. Il est lu par les navigateurs qui interprètent tout le codage des textes, couleurs, liens hypertexte et autres éléments de formatage. Il permet également, via du code spécifique, l’insertion et la présentation d’images, de documents « audio » ou « vidéo », et plus.
Les fichiers HTML, tels qu’ils sont déployés sur les serveurs web, ont l’extension .html ou .htm.

Souvent, nous traitons du texte au format HTML en le récupérant automatiquement des pages web (techniques de « web scraping »), puis en l’analysant avec un parseur HTML. Dans d’autres cas, nous avons à disposition sur la machine le fichier HTML, et nous l’ouvrons pour traiter son contenu avec le parseur.

Pour manipuler du texte HTML dans le but d’en extraire les données, une technique relativement simple se base sur la bibliothèque tierce-partie de Python, « BeautifulSoup ». Et vous devez l’installer si besoin, en utilisant la commande suivante :
pip install bs4.

Comme vous le voyez à l’aide de notre notebook de démonstration, vous utilisez l’appel « BeautifulSoup(content, « html.parser ») » pour obtenir l’objet qui représente la structure HTML du fichier. Cet objet porte des méthodes telles que « find_all() », qui est très pratique pour trouver, dans le texte, tous les éléments correspondant à une balise donnée.

Le XML

Les échanges de données sont devenus des actions récurrentes dans les processus industriels. Le XML (Extensible Markup Language) a été inventé pour aider à faciliter ce type d’actions. On peut penser aux transferts de données sur les transactions, les produits, les données du personnel au sein des entreprises, ou les informations des marchés financiers.

Le format ou langage XML est basé sur des balises, comme le HTML, mais contrairement à ce dernier, le XML intervient en arrière-plan dans les traitements informatiques ; on parle souvent de « langage machine ».
Les fichiers XML utilisent l’extension .xml.

Pour analyser du XML avec Python, nous pouvons également nous baser sur « BeautifulSoup ». En vous référant au notebook, vous comprendrez rapidement la logique : ici, nous avons pu trouver tous les éléments correspondant à une balise XML donnée en utilisant « find_all() ».

Le JSON

Le JSON (JavaScript Object Notation) est un format de fichier dérivé du langage JavaScript. Comme le XML, le JSON sert aux échanges de données.
Dans un fichier JSON (fichier généralement d’extension « .json »), les données sont stockées de manière organisée, en utilisant des paires « clé / valeur ».

Même si nous en parlons ici, au sein de la catégorie des fichiers texte, le JSON est quand même un cas un peu spécial, dans la mesure où le contenu d’un fichier JSON représente un objet JavaScript (ou un tableau avec plusieurs objets). Étant un outil d’échange de données pour JavaScript, les valeurs stockées au sein du fichier peuvent être un nombre, une chaîne de caractères, null, true ou false, un objet JavaScript ou un tableau.

Pour manipuler du JSON avec Python, pas besoin d’un module tierce-partie. Ainsi, nous pouvons utiliser le module « json » inclus dans Python. La fonction « load() » du module sert à charger en mémoire la structure JSON contenue dans un fichier, à partir du descripteur du fichier obtenu en ouvrant le fichier comme tout fichier texte. Dans cet exemple, on obtient un objet Python, de type Dictionnaire.

Sachant que le dictionnaire est un type d’objet classique et omniprésent dans Python, nous sommes dans notre zone de confort pour exploiter ce résultat.

On peut aussi transformer une structure de données Python en JSON et stocker le résultat dans un fichier, le tout en une action. On parle de « sérialisation ». Pour sérialiser les données en JSON, on utilise la fonction « dump() » du module « json », comme le montre notre dernier exemple, en lui passant le dictionnaire Python et le descripteur du fichier ouvert en écriture.

Vous l’avez compris, comme « BeautifulSoup » pour les fichiers HTML et XML, le module « json » est très pratique pour manipuler du JSON.

Conclusion

Vous avez pu voir comment manipuler un fichier texte simple, le format de base de tout ficher content du texte imprimable.
De plus, pour les formats textuels spécifiques tels que HTML, XML, ou JSON, comme nous l’avons vu, il existe des outils (parseurs) pour manipuler les données de manière efficace. Nous nous sommes volontairement limités à BeautifulSoup pour le HTML / XML et json pour le JSON, mais il existe des solutions alternatives pour lesquelles vous pourriez opter selon votre besoin spécifique et vos contraintes.

Pour d’autres types de fichier texte, si vous devez extraire leurs données de manière précise, vous pourriez trouver le bon parseur en cherchant dans l’écosystème des bibliothèques Python.

Initiation à Python

Une introduction sous forme d’un webinaire, pour vous permettre de découvrir l’importance du langage Python comme outil de programmation au service des besoins de votre entreprise ou pour le développement d’une application.

Scroll to top