


Générez des rapports de fichiers à l'aide de la classe Template de Python
Introduction
Souvent, je me retrouve à devoir effectuer des tâches telles que générer des rapports, sortir des fichiers ou des chaînes. Ils suivent tous plus ou moins un modèle, et souvent les modèles sont si similaires que nous souhaitons disposer d'un modèle dans lequel nous pouvons réutiliser et alimenter directement les données. Heureusement, Python propose une classe qui peut nous aider : string.Template.
Dans cet article, vous apprendrez comment exploiter cette classe pour générer un fichier de sortie basé sur les données que vous utilisez actuellement, et comment manipuler les chaînes de la même manière. Ainsi, au lieu de simplement utiliser des exemples que vous pourriez rencontrer dans votre travail quotidien, cet article vous présente un certain nombre d'outils réels que vous connaissez probablement et qui utilisent cette classe pour générer des fichiers de rapport. Commençons !
Remarque : cet article est basé sur Python 3.9.0 (CPython). Vous pouvez trouver des exemples de code utilisés tout au long de cet article sur GitHub (https://github.com/DahlitzFlorian/generate-file-reports-using-pythons-template-class).
Avant de regarder un exemple, prenons le temps d'examiner les avantages de l'utilisation de string.Template par rapport à d'autres solutions.
1. Aucune autre dépendance n'est requise, cela fonctionne immédiatement, il n'est donc pas nécessaire d'utiliser la commande pip install pour l'installer.
2. Il est léger et, bien sûr, les moteurs de modèles tels que Jinja2 et Mako ont été largement utilisés. Cependant, dans le scénario présenté dans cet article, ces capacités sont surestimées.
3. Séparation des préoccupations : au lieu d'intégrer la manipulation de chaînes et la génération de rapports directement dans le code, vous pouvez utiliser des fichiers modèles pour les déplacer vers un emplacement externe. Si vous souhaitez modifier la structure ou la conception de votre rapport, vous pouvez échanger des fichiers modèles sans modifier votre code.
En raison de ces avantages, certaines bibliothèques et outils tiers bien connus l'utilisent. Wily en est un exemple, et fin 2018, Anthony Shaw, l'inventeur et responsable de Wily, souhaitait prendre en charge HTML comme format de sortie pour les rapports générés par Wily.
Exemple : Générer un rapport des meilleurs livres
Après avoir discuté de la motivation derrière l'utilisation de la classe string.Template intégrée à Python, nous examinerons le premier exemple pratique. Imaginez que vous travaillez pour une entreprise qui publie un rapport annuel sur les meilleurs livres publiés au cours de l'année écoulée. 2020 est une année particulière car en plus de votre rapport annuel, vous publiez également une liste des meilleurs livres jamais écrits.
À ce stade, peu nous importe d'où proviennent les données ou quels livres font partie de la liste. Pour plus de simplicité, supposons que nous disposions d'un fichier JSON appelé data.json qui contient un mappage des noms d'auteurs et des titres de livres, comme indiqué ci-dessous.
{ "Dale Carnegie": "How To Win Friends And Influence People", "Daniel Kahneman": "Thinking, Fast and Slow", "Leo Tolstoy": "Anna Karenina", "William Shakespeare": "Hamlet", "Franz Kafka": "The Trial" }
Votre tâche est maintenant de le partager d'une certaine manière avec d'autres (par exemple de grands magazines, des entreprises ou des blogueurs). L'entreprise a décidé qu'un simple tableau au format HTML suffirait. Maintenant la question est : comment générer ce tableau HTML ?
Bien sûr, vous pouvez le faire manuellement ou créer des espaces réservés pour chaque livre. Mais il serait très souhaitable de disposer ultérieurement d'une version plus générale, car le contenu de la liste peut être étendu ou la conception structurelle modifiée.
Nous pouvons désormais profiter de la classe string.Template de Python ! Nous commençons par créer le modèle réel comme indiqué ci-dessous. Ici, nous appelons le fichier template.html.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Great Books of All Time</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous"> </head> <body> <h1 id="Great-Books-of-All-Time">Great Books of All Time</h1> <table > <thead> <tr> <th scope="col">#</th> <th scope="col">Author</th> <th scope="col">Book Title</th> </tr> </thead> <tbody> ${elements} </tbody> </table> </body> </html>
Le document lui-même est très rudimentaire. Nous avons utilisé bootstrap pour styliser et créer la structure de base de la table finale. L'en-tête est inclus, mais les données sont toujours manquantes. Notez que dans l'élément tbody, un espace réservé ${elements} est utilisé pour marquer l'endroit où nous injecterons ultérieurement la liste des livres.
Nous nous sommes tous mis en place pour implémenter un script Python qui génère le résultat souhaité ! Par conséquent, nous créons un nouveau fichier Python nommé report.py dans le répertoire de travail actuel. Tout d'abord, nous importons les deux modules intégrés requis et chargeons les données à partir d'un fichier JSON.
# report.py import json import string with open("data.json") as f: data = json.loads(f.read())
Maintenant, la variable data est un dictionnaire contenant le nom de l'auteur (clé) et le titre du livre (valeur) sous forme de paires clé-valeur. Ensuite, nous générons le tableau HTML et le plaçons dans le modèle (vous vous souvenez des espaces réservés ?). Nous initialisons donc une chaîne vide et y ajoutons de nouvelles lignes de tableau comme indiqué ci-dessous.
content = "" for i, (author, title) in enumerate(data.items()): content += "<tr>" content += f"<td>{i + 1}</td>" content += f"<td>{author}</td>" content += f"<td>{title}</td>" content += "</tr>"
Cet extrait de code nous montre parcourir tous les éléments du dictionnaire de données et placer le titre du livre ainsi que le nom de l'auteur dans les balises HTML correspondantes. Nous avons créé le tableau HTML final. À l'étape suivante, nous devons charger le fichier modèle que nous avons créé précédemment :
with open("template.html") as t: template = string.Template(t.read())
Notez que string.Template accepte une chaîne, pas un chemin de fichier. Par conséquent, vous pouvez également fournir une chaîne préalablement créée dans le programme sans la sauvegarder dans un fichier. Dans notre cas, nous fournissons le contenu du fichier template.html.
Enfin, nous utilisons la méthode replace() du modèle pour remplacer l'élément placeholder par la chaîne stockée dans le contenu de la variable. La méthode renvoie une chaîne que nous stockons dans la variable final_output. Enfin, nous créons un nouveau fichier appelé report.html et y écrivons le résultat final.
final_output = template.substitute(elements=content) with open("report.html", "w") as output: output.write(final_output)
现在已经生成了第一个文件报告!如果在浏览器中打开report.html文件,则可以看到结果。
safe_substitution()方法
现在,您已经构建了第一个string.Template用例,在结束本文之前,我想与您分享一个常见情况及其解决方案:安全替换。它是什么?
让我们举个例子:您有一个字符串,您想在其中输入一个人的名字和姓氏。您可以按照以下步骤进行操作:
# safe_substitution.py import string template_string = "Your name is ${firstname} ${lastname}" t = string.Template(template_string) result = t.substitute(firstname="Florian", lastname="Dahlitz") print(result)
但是,如果您错过传递一个或另一个的值会怎样?它引发一个KeyError。为避免这种情况,我们可以利用safe_substitution()方法。在这种情况下,safe意味着Python在任何情况下都尝试返回有效字符串。因此,如果找不到任何值,则不会替换占位符。
让我们按以下方式调整代码:
# safe_substitution.py import string template_string = "Your name is ${firstname} ${lastname}" t = string.Template(template_string) result = t.safe_substitute(firstname="Florian") print(result)# Your name is Florian ${lastname}
在某些情况下,这可能是一个更优雅的解决方案,甚至是必须的行为。但是这可能在其他地方引起意外的副作用。
本文概要
在阅读本文时,您不仅学习了Python字符串的基本知识。Template类以及使用它的原因,而且还实现了第一个文件报告脚本!此外,您已经了解了safe_substitution()方法以及在哪种情况下使用它可能会有所帮助。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

L'embellissement XML améliore essentiellement sa lisibilité, y compris l'indentation raisonnable, les pauses-lignes et l'organisation des étiquettes. Le principe est de traverser l'arbre XML, d'ajouter l'indentation en fonction du niveau et de gérer les balises et les balises vides contenant du texte. La bibliothèque XML.ETREE.ElementTree de Python fournit une fonction Pretty_xml () pratique qui peut implémenter le processus d'embellissement ci-dessus.

Utiliser la plupart des éditeurs de texte pour ouvrir des fichiers XML; Si vous avez besoin d'un affichage d'arbre plus intuitif, vous pouvez utiliser un éditeur XML, tel que Oxygen XML Editor ou XMLSPY; Si vous traitez les données XML dans un programme, vous devez utiliser un langage de programmation (tel que Python) et des bibliothèques XML (telles que XML.ETREE.ElementTree) pour analyser.

La modification du contenu XML nécessite une programmation, car elle nécessite une recherche précise des nœuds cibles pour ajouter, supprimer, modifier et vérifier. Le langage de programmation dispose de bibliothèques correspondantes pour traiter XML et fournit des API pour effectuer des opérations sûres, efficaces et contrôlables comme les bases de données de fonctionnement.

Une application qui convertit le XML directement en PDF ne peut être trouvée car ce sont deux formats fondamentalement différents. XML est utilisé pour stocker des données, tandis que PDF est utilisé pour afficher des documents. Pour terminer la transformation, vous pouvez utiliser des langages de programmation et des bibliothèques telles que Python et ReportLab pour analyser les données XML et générer des documents PDF.

Il n'y a pas d'outil XML à PDF simple et direct sur mobile. Le processus de visualisation des données requis implique une compréhension et un rendu complexes des données, et la plupart des outils dits "gratuits" sur le marché ont une mauvaise expérience. Il est recommandé d'utiliser des outils côté informatique ou d'utiliser des services cloud, ou de développer vous-même des applications pour obtenir des effets de conversion plus fiables.

La vitesse du XML mobile à PDF dépend des facteurs suivants: la complexité de la structure XML. Méthode de conversion de configuration du matériel mobile (bibliothèque, algorithme) Méthodes d'optimisation de la qualité du code (sélectionnez des bibliothèques efficaces, optimiser les algorithmes, les données de cache et utiliser le multi-threading). Dans l'ensemble, il n'y a pas de réponse absolue et elle doit être optimisée en fonction de la situation spécifique.

Il n'est pas facile de convertir XML en PDF directement sur votre téléphone, mais il peut être réalisé à l'aide des services cloud. Il est recommandé d'utiliser une application mobile légère pour télécharger des fichiers XML et recevoir des PDF générés, et de les convertir avec des API Cloud. Les API Cloud utilisent des services informatiques sans serveur et le choix de la bonne plate-forme est crucial. La complexité, la gestion des erreurs, la sécurité et les stratégies d'optimisation doivent être prises en compte lors de la gestion de l'analyse XML et de la génération de PDF. L'ensemble du processus nécessite que l'application frontale et l'API back-end fonctionnent ensemble, et il nécessite une certaine compréhension d'une variété de technologies.

Pour convertir les images XML, vous devez d'abord déterminer la structure des données XML, puis sélectionner une bibliothèque graphique appropriée (telle que Matplotlib de Python) et la méthode, sélectionner une stratégie de visualisation basée sur la structure de données, considérer le volume de données et le format d'image, effectuer un traitement par lots ou utiliser des bibliothèques efficaces, et enfin les enregistrer sous le nom de PNG, JPEG, ou SVG selon les besoins.
