[Python] parsing config file

Daniele Varrazzo piro a develer.com
Ven 22 Nov 2013 20:55:12 CET


On 2013-11-22 17:18, Roberto Preziusi wrote:
> Ciao,
> avrei bisogno di effettuare il parsing di un file così composto:
>
> ...
>        address-set ABC_DEF {
>                     address ABC_PRO_1;
>                     address BCD_PRO_IP2;
>                     address AAA_ABC;
>                     address FFF_CHCD;
>                     ....
>        }
> ...

Sembra abbastanza facile da fare con le espressioni regolari. La 
soluzione corretta è scrivere un parser con un generatore che parta 
dalla vostra grammatica (ply, pyparsing).


> All'interno dello stesso file ho altri campi "address-set" con altri 
> nomi
> diversi da "ABD_DEF"
>
> Vorrei creare una lista con dentro tutti gli address del mio 
> address-set
> address-list = ["ABC_PRO_1", "BCD_PRO_IP2", ... ]
>
> Qualcuno sa dirmi se ci sono librerie in python che fanno questo o se 
> c'è
> un modo veloce x farlo ?
>
> Altra domanda:


Domanda mia: ve lo siete inventati voi quel formato?

Perchè state reinventando l'acqua calda: non dovreste scrivere un nuovo 
parser se potete usare un linguaggio diverso. Quale? Ce ne sono a 
tonnellate pronti per essere usati in Python:

1. python stesso. Se il formato è Python basta importarlo per avere 
tutti gli oggetti, ed avete anche già pronti modularità (usando import), 
potete usare espressioni, variabili...

     address_set("ABC_DEF",
         address("ABC_PRO_1"),
         address("BCD_PRO_IP2"),
         ...)

2. un file ini sembra più che sufficiente, non so se si possono fare 
ripetizioni. Il parser è nella stdlib.

[ABC_DEF]
address: ABC_PRO_1
address: BCD_PRO_IP2

3. YAML è facilissimo da editare a mano

4. JSON pure andrebbe più che bene, meno editabile di YAML ma il parser 
è nella stdlib.

> sarebbe piu' facile effettuare la stessa operazione se avessi la 
> possibiltà
> di esportare questa conf in xml ?

5. XML se proprio ti diverti ad overingegnerizzare per nessun risultato 
apprezzabile.


-- Daniele


Maggiori informazioni sulla lista Python