|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonsoir,
<verbiage à sauter> Je me remets à Python après de longue semaines passées sur d'autres choses. J'étais à deux doigts d'avoir tout perdu d'un apprentissage assez intensif, c'est un classique chez moi. Mais pour Python je m'y refuse, comme pour le C par exemple. Heureusement, je peux utiliser mon code pour me remettre dans le bain... Mon but est de faire de Python mon langage outil dans un contexte de portabilité totale Linux - Windows s'il y a lieu, et de favoriser les paquetages/bibliothèques installés par défaut. Dans cette optique j'avais fait de l'utilitaire avec TKInter. Je m'y suis remis en programmant des greffons pour Gedit et Nautilus. Tout à fait convaincant, d'autant que n'ayant aucune culture Unix, je suis très laborieux dans les langages de script historiques. J'en arrive aux scripts pour OpenOffice.org. Je ne cible pour l'instant que les scripts internes. C'est l'apocalypse documentaire, mais je m'accroche. J'en arrive au script en question... </verbiage à sauter> Au départ j'ai des commandes trouvées sur cette page: <URL:http://ll.lairdutemps.org/linux/ooo> pour lister des formats de fichiers. Je teste les commandes sous Debian et XP/Cygwin, ça marche. Mais je ne veux pas m'imposer un environnement particulier, donc je ne peux pas récupérer ces commandes. Donc, je le fais entièrement en Python. Je bricole sous Eclipse/Pydev, avec une version 2.3.4 qui est celle de mon OOo. J'en arrive à: <code> #!/usr/bin/python # -*- coding: iso-8859-1 -*- import sys, os, re, glob print sys.version, '\n', sys.version_info inidir = 'D:\\Program Files (x86)\\OpenOffice.org 2.2\\share\\registry\\modules\\org\\openoffice\\Ty peDetection' filepattern = '*' #matchsubstring = 'node oor:name="' #extractpattern = re.compile(matchsubstring + '([^"]*).*', re.IGNORECASE) extractpattern = re.compile('<[\s]*node[\s]+oor[\s]*:[\s]*name[\s]*=[\s]*"([^"]*).*', re.IGNORECASE) for root, dirs, files in os.walk(inidir): for filename in glob.glob(os.path.join(root, filepattern)): try: for line in open(filename): try: print re.search(extractpattern, line).group(1) except AttributeError: # no match -> no 'group' attribute for None pass except IOError:# filename is a dir pass sys.exit(0) </code> Je sollicite donc une correction, sachant que deux points me chagrinent: - Comment pourrais-je faire pour garder la souplesse de la séquence en commentaire: matchsubstring = 'node oor:name="' etc. et conserver une certaine souplesse dans la présence d'espaces inutiles, comme le fait le regex utilisé ? Un truc un peu comme le IGNORECASE ? - L'utilisation des exceptions pour éviter de tester par os.path.isdir() et le retour de re.search() est-elle pertinente ? Je précise que ce code sera archivé (mots clé 'regex, grep, sed') mais certainement pas utilisé. Je vais en effet maintenant voir une solution à partir des modules xml.???, toujours essentiellement pour ne pas mourir idiot. Bonne soirée... -- Pierre Maurette |
|
![]() |
| Outils de la discussion | |
|
|