Python : Date et parsing de texte

Programmation en python

Pour les besoins d’un script en python, j’ai besoin de petits bouts de code. En effet, suite à mon article sur websphere, j’ai besoin de parser des résultats et de les stocker dans un fichier texte. On va voir ensemble comment procéder.

Récupération de la date du jour :

import time
# Obtenir l'heure et la date locale
now = time.localtime(time.time())

print time.strftime("%y/%m/%d %H:%M", now)
date en python

ça affiche :

16/09/09 09:07

Ensuite, ce que je veux faire, c’est parser la ligne ci-dessous et récupérer uniquement la valeur de UsedMemory :

jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;

Je vous rappelle comme j’avais fait en ksh pour parser :

cat resultat | grep UsedMemory | awk -F"=" ' { print $4 }' | awk -F";" ' { print $1 }'
Parsing en ksh

On va décomposer étape par étape, je vais commencer par utiliser la commande split et lui indiquer divers séparateurs. Je l’avais déjà utilisé lors d’un précédent article, mais bon, ça fait déjà 4 ans et demi !

import re

example = "jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;"

parts = example.split()
print parts[4]
other = parts[4].split('=')
print other[1]
fin = other[1].split(';')
print fin[0]
parsing step by step

Voilà le résultat :

UsedMemory=318347;;;;
318347;;;;
318347

Optimisation de code

C’est un code qui fonctionne, me direz-vous, mais peut-on faire ça en deux lignes au lieu de trois ?

import re

example = "jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;"

partie = example.split(';')
print partie[8]
valeur = partie[8].split('=')
print valeur[1]

Résultat :

 UsedMemory=318347
318347

Il faut tout de même que je teste la présence de UsedMemory :

import re

example = "jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;"
if "UsedMemory" in example:
 partie = example.split(';')
 print partie[8].split('=')[1]

Si on revient à mon code initial, il faut que j’écrive sur la même ligne la date et la valeur d’UsedMemory. Pour l’instant, le code ci-dessous ne fonctionne pas !

for stat in statsList:
  if "UsedMemory" in str(stat):
   now = time.localtime(time.time())
   partie = stat.split(';')
   print time.strftime("%d/%m/%y %H:%M", now) , partie[8].split('=')[1]
   time.sleep(5)
Belle erreur python !

 

Traceback (innermost last):
  File "<string>", line 64, in ?
TypeError: string member test needs char left operand

Recherche Google

Du coup, je fais une petite recherche sur Google et je tombe sur l’excellent site stackoverflow. Je rajoute au passage un séparateur ; entre mes différents champs, ce qui me génèrera du « pseudo csv ».

for stat in statsList:
  if stat.find('UsedMemory=') >= 0:
   now = time.localtime(time.time())
   partie = stat.split(';')
   print time.strftime("%d/%m/%y %H:%M", now),";",partie[8].split('=')[1]
   time.sleep(5)

Résultat :

09/09/16 10:29 ; 383886
09/09/16 10:29 ; 383886
09/09/16 10:29 ; 385079
...
09/09/16 10:31 ; 396919
09/09/16 10:31 ; 396919
09/09/16 10:31 ; 398375
09/09/16 10:31 ; 396919

Pour la partie écriture dans un fichier de logs, pour l’instant je vais utiliser ksh :)

Sources : 

Erreur python : IndexError: list index out of range

Comme vous le savez tous, je débute en python. Je ne programme pas vraiment mais il m’arrive de devoir déboguer des programmes écrits en python. Ce matin, une erreur m’énerve particulièrement :

IndexError: list index out of range

Voilà ce que ça donne avec la trace complète de l’erreur :

Traceback (most recent call last):
File « monScript.py », line 357, in ?
main()
File « monScript.py », line 349, in main
maFonction(monParam)
File « monScript.py », line 246, maFonction
maVariable = str(dataLigne[monChamp])
IndexError: list index out of range

Je comprends que le script souhaite accéder à un index qui n’existe pas. Mais pour en avoir le cœur net, je lance une petite recherche sur Google et je tombe sur les sites suivants :

(j’ai remplacé les noms de fichier, de variables et de fonction pour conserver un minimum de confidentialité)

Mon premier cours sur coursera.org : Conception et mise en œuvre d’algorithmes

En discutant avec mon collègue Stéphane, j’apprends qu’il existe un site internet où on peut prendre des cours en ligne. Ce site permettrait d’assister à des cours présentés par des professeurs d’universités prestigieuses du monde entier. Ci-dessous quelques chiffres :

coursera2

Comme je suis polie, je laisse mon collègue me présenter ce site et toutes ses fonctionnalités. Assister à des cours de chez moi, c’est bien beau lui dis-je mais combien ça coûte ?  Et là, je reste scotchée quand j’entends que c’est gratuit, oui, gratuit ! Merci Stéphane !!!

Je parcours le site, je m’inscris et je trouve « LE » cours qu’il me fallait ! Un cours sur l’algorithmique, car je vous avoue que le cours d’algo auquel j’ai assisté en 2001, ça date un peu ! Je ne suis pas contre un petit « refresh » de ma mémoire.

Le cours dispensé par des professeurs de l’école Polytechnique a débuté hier et je visionne tranquillement les vidéos, bien au chaud de chez moi :) Ma session se termine fin décembre, je vous dirai si j’ai été assidue ou pas ;)

Bon je vous laisse, je retourne à mon cours… alors la recherche dichotomique…

coursera

Tutoriels java sur slideshare

Il y a différentes manières d’apprendre le langage java. Un collègue m’a conseillé les présentations powerpoint hébergées sur le site slideshare. Vous trouverez donc ci-dessous quelques unes des présentations que j’ai lues.

La première présentation est en anglais, elle est adaptée aux débutants car elle reprend aussi les principes de la programmation.

 

Cette deuxième présentation en français n’est pas destinée aux programmeurs java, elle concernerait plus les administrateurs système. Le but de cette présentation est de nous apprendre comment optimiser la gestion de la mémoire de la JVM. Vous y trouverez des notions comme le garbage collector, le throughput ou encore heap.

Dans cette troisième présentation dédiée au garbage collector, vous entendrez parler de minor GC, de full GC, de survivor space… Rassurez-vous, même si cette présentation est en anglais, elle vous sera très utile pour comprendre comment le garbage collector fonctionne, comment il gère la mémoire. On y trouve des conseils sur l’allocation mémoire, par exemple, il est préconisé de créer des « petits » objets avec des durées de vie courtes. Le mécanisme de fuite mémoire y est notamment détaillé. Dans cette présentation, vous trouverez aussi des conseils pour bien gérer la mémoire : ne pas forcer le lancement du garbage collector (System.gc()), utiliser le bloc finally dans la programmation java (gestion des fichiers, gestion bases de données), … Elle mentionne quelques outils de base pour le monitoring : jconsole, jstat, jmap, jhat

Je vous laisse, je retourne sur le site slideshare :)