[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