Initiation à quelques modules Python intéressants
Contents
Software version | 2.7 / 3.2 |
---|---|
Operating System | |
Website | Python Website |
Last Update | 18/09/2012 |
Others |
1 Introduction
Il existe beaucoup de modules Python. J'en aborderais ici quelques uns que je trouve très pratique.
2 XPath
Le module XPath est très pratique puisqu'il permet facilement de lire et écrire des fichiers au format XML. Je vous rappelle que ce format de fichier n'est pas à utiliser à toutes les sauces, puisqu'il n'est pas facilement lisible à l’œil humain.
2.1 Installation
Pour installer tout ce dont nous allons avoir besoin :
aptitude |
aptitude install libxml2-dev libxslt1-dev python-lxml |
2.2 Utilisation
Dans un fichier au format XML, chaque balise est également appelé un tag. Un XPath va être un chemin permettant de retrouver une information dans l’arborescence d’un document XML. Voici un exemple de fichier XML :
Si nous utilisons XPath, nous utiliserons des requêtes appelées XQuery (équivalent aux requêtes SQL). Voici quelques exemple pour comprendre l'utilisation des chemins :
- /breakfast_menu/food : récupère l'ensemble des neuds "food" contenu dans la noeud racine "breakfast_menu" (lignes de 2 à 7, de 8 à 13...)
- //food : désigne n'importe quel noeud ayant pour nom "food".
- /breakfast_menu/food[1] : on récupère ici le premier noeud "food" dans "breakfast_menu". On met entre crochets, le numéro de "food" qui nous intéresse.
- /breakfast_menu/food[last] : récupère le dernier noeud food.
- /breakfast_menu/food[position()<2] : récupère les 2 premiers noeud food.
- /breakfast_menu/food[calories<=900]/name : récupère le nom des aliments inférieur ou égale à 900 calories.
- //food/@country : désigne tous les attributs "country" associés à un nœud (lignes 2 et 9, mais seulement l’attribut et sa valeur).
- //food[@country="Belgian"] : récupère tous les livres ayant un attribut "country" dont la valeur est "Belgian".
- /breakfast_menu/food/* : récupère l’ensemble des tags inclus dans les nœuds "food" de "breakfast_menu".
- /breakfast_menu/food/name | /breakfast_menu/food/price : recherche tous les noeuds de type food contenant name et price.
- /breakfast_menu/food[contains(., "Belgian")] : récupère les nœuds de "food" qui contiennent le mot "Belgian" (le point en premier paramètre de la fonction contains() représente le contenu du nœud).
2.2.1 Lecture
Voici comment parser un fichier XML en lecture avec quelques exemples :
# Pour utiliser lxml/xpath, nous allons le charger from lxml import etree # Fichier a charger tree = etree.parse("breakfast.xml") ## On lance les XQuery souhaitées ## # tag permet d'obtenir le nom du tag (food) et get() récupère ses attributs for node in tree.xpath("//food"): print node.tag + " en " + node.get("country") # items() permet d’obtenir la liste des attributs d’un tag : for node in tree.xpath("//food"): print node.items() # text donne accès au contenu d'un nœud for node in tree.xpath("//food"): print node.text # getParent() permet de remonter d’un nœud vers le parent
2.2.2 Écriture
Voici comment écrire un fichier XML avec quelques exemples :
# Pour utiliser lxml/xpath, nous allons le charger from lxml import etree # On créer le premier noeud : root = etree.Element("breakfast_menu") # Les nœuds sont créés à l’aide de l’objet SubElement : food = etree.SubElement(root, "food") # Nous pouvons ajouter des attributs à ce tag avec la méthode set() : food.set("country", "Belgian") # L’attribut text permet de spécifier le contenu d’un nœud : name = etree.SubElement(food, "name") name.text = "Belgian Waffles" # Pour générer le code XML : # pretty_print permet d'avoir un code proprement indenté print etree.tostring(root, pretty_print=True)
Faites un open(), write() et close() pour écrire ensuite dans un fichier.