[Python] Estrazione info con regexp o binding funzioni C?

Pietro Zambelli peter.zamb a gmail.com
Mar 26 Gen 2010 10:32:43 CET


Ciao a tutti!

ho un problema con l'estrazione di alcuni valori da una stringa generata dal 
comando "r.info map=dtm10" di grass.

stringa="""
 +----------------------------------------------------------------------------+
 | Layer:    dtm10 a trentino                 Date: Tue Sep  1 12:33:16 2009    |
 | Mapset:   trentino                       Login of Creator: pietro          |
 | Location: trentinGBrm40                                                    |
 | DataBase: /dati/pietro/lavoro/GIS                                          |
 | Title:     ( dtm10 )                                                       |
 | Timestamp: none                                                            |
 |----------------------------------------------------------------------------|
 |                                                                            |
 |   Type of Map:  raster               Number of Categories: 3759            |
 |   Data Type:    CELL                                                       |
 |   Rows:         10216                                                      |
 |   Columns:      12220                                                      |
 |   Total Cells:  124839520                                                  |
 |        Projection: Transverse Mercator                                     |
 |            N:    5159000    S:    5056840   Res:    10                     |
 |            E:    1731640    W:    1609440   Res:    10                     |
 |   Range of data:    min = 52  max = 3759                                   |
 |                                                                            |
 |   Data Description:                                                        |
 |    generated by r.in.arc                                                   |
 |                                                                            |
 |   Comments:                                                                |
 |    r.in.arc input="/dati/pietro/lavoro/GIS/DTM10_integerMIO.asc" output\   |
 |    ="dtm10" type="CELL" mult=1.0                                           |
 |                                                                            |
 +----------------------------------------------------------------------------+
"""

vorrei estrarre la chiave ed il valore creando un dizionario
{'Layer':'dtm10 a trentino'.
 'Date':'Tue Sep  1 12:33:16 2009',
 'Mapset':'trentino',
 'etc':'etc',}

per farlo pensavo di ricorrere ad una regexp ma non sono riuscito a trovare la 
giusta soluzione...
regexp = re.compile(r"""(?P<key>([A-Z]?[A-Za-z0-9]+\s?)+):\s+\(?\s?(?P<val>([A-
Za-z0-9/=]+\s?)+)\s?\)?""")
l=regexp.findall(stringa)


PROBLEMI
==========

1: mi trova 4 valori e non 2.

2: la data non la trova potrei estrarla in seguito con un'altra regexp del tipo: 
"""(?P<day>[A-Z][a-z]{2})\s(?P<month>[A-Z][a-z]
{2})\s+(?P<nday>\d{1,2})\s(?P<h>\d{2})\:(?P<m>\d{2})\:
(?P<s>\d{2})\s(?P<year>\d{4})\s"""

3: "Range of data:    min = 52  max = 3759" e "Comments: r.in.arc 
input="/dati/pietro/lavoro/GIS/DTM10_integerMIO.asc" output="dtm10" type="CELL" 
mult=1.0" non vengono presi...

Esiste una regexp in grado di prendere tutto quello che mi interessa in un colpo 
solo? o è necessario fare più passate? oppure costruire una funzione ad hoc?


DUBBI:
=========

1: Forse in questo caso mi converrebbe fare il binding direttamente delle 
funzioni in C che costruiscono la stringa in quel modo? 
(http://svn.osgeo.org/grass/grass/trunk/raster/r.info/)

2: Per un lavoro di questo tipo cosa consigliereste ctypes o cython?
 
Grazie per l'aiuto! scusate la lunghezza... e l'ignoranza :-)

Pietro



-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100126/9204b5d0/attachment-0001.htm 


Maggiori informazioni sulla lista Python