[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