[python] Slovniky
Petr Prikryl
PrikrylP na skil.cz
Čtvrtek Červenec 7 14:09:43 CEST 2005
Radko Šubert...
> [...]mam treba ini soubor:
>
> [sekceA]
> aaa=a
> bbb=c
> [sekceB]
> ccc=c
> ddd=d
>
> a potreboval bych vytvorit slovniky, ktere se budou jmenovat
> podle sekci [...] a ty naplnit obsahem sekci. Ini soubor ctu v
> cyklu prez readline().Druhou cast zvladnu, zjistit zda dany radek je
> nazvem sekce, nebo jejim obsahem, to taky umim, nazev sekce
> umim dat do promenne, ale potreboval bych pomoct s tim pojmenovanim
> daneho slovniku.
Dal bych asi přednost hotovému ConfigParser, ale principiálně
by se to dalo udělat takto:
f = file('moje.ini')
x = {} # prázdný slovník sekcí
for line in f:
# rozpoznání řádku
# pokud je to sekce, pak
sekce = ... # identifikace nové sekce
secDic = {} # prázdný slovník symbolů sekce
x[sekce] = secDic # zařadíme novou sekci do slovníku sekcí
# pokud je to symbol sekce
symbolId = ... # identifikace symbolu
hodnota = ... # hodnota symbolu
# předpokládám, že secDic odkazuje na slovník aktuální sekce.
secDic[symbolId] = hodnota
# else:
# ignorovat prázdné řádky a komentáře,
# hlásit chybné řádky
f.close()
Pak můžu odkaz na slovník 'sekceA' získat (za předpokladu,
že existuje):
sekceA = x['sekceA']
Hodnotu symbolu 'aaa' z této sekce
hodnota = sekceA['aaa']
nebo přímo
hodnota = x['sekceA']['aaa']
Musí se ale ošetřit přístup k neexistujícím sekcím a symbolům.
Prakticky to znamená implementovat vše jako třídu a stejně
by se skončilo u podobného řešení, jako je ConfigParser.
ConfigParser.py se standardně nachází v podadresáři Python/Lib/
a má jen asi 650 řádků. Asi to stojí za nahlédnutí. (Sekci
se v něm říká rovněž sekce a symbolu se říká option.)
pepr
Další informace o konferenci Python