Initiation à quelques modules Python intéressants

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Python

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 :

Command 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 :

Configuration File breakfast.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<breakfast_menu>
	<food country="Belgian">
		<name>Belgian Waffles</name>
		<price>$5.95</price>
		<description>two of our famous Belgian Waffles with plenty of real maple syrup</description>
		<calories>650</calories>
	</food>
	<food country="Belgian">
		<name>Strawberry Belgian Waffles</name>
		<price>$7.95</price>
		<description>light Belgian waffles covered with strawberries and whipped cream</description>
		<calories>900</calories>
	</food>
	<food country="Belgian">
		<name>Berry-Berry Belgian Waffles</name>
		<price>$8.95</price>
		<description>light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
		<calories>900</calories>
	</food>
	<food country="French">
		<name>French Toast</name>
		<price>$4.50</price>
		<description>thick slices made from our homemade sourdough bread</description>
		<calories>600</calories>
	</food>
	<food country="Homestyle">
		<name>Homestyle Breakfast</name>
		<price>$6.95</price>
		<description>two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
		<calories>950</calories>
	</food>
</breakfast_menu>

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.

3 References