Accéder à GnuCash en Python

Il existe un module Python pour accéder aux fichiers GnuCash. Cela permet d’analyser vos comptes. Mais ce module est si mal documenté que le plus simple est encore de lire le source du module! Voici donc quelques exemples concrets d’utilisation.

  1. Installer le module sous Ubuntu

    sudo apt-get install python-gnucash
    

  2. Ouvrir un fichier de données et afficher l’arborescence des comptes

    #!/usr/bin/python
    import gnucash
    FILE = "/chemin/de/mon/fichier/GnuCash"
    
    session = gnucash.Session(FILE, ignore_lock=True, is_new=False)
    book = session.book
    a_root = book.get_root_account()
    def atree(a, prefix=''):
    	s = prefix+a.GetName()+'\n'
    	for suba in a.get_children():
    		suba = gnucash.Account(instance = suba)
    		s += atree(suba, '  '+prefix)
    	return s
    print atree(a_root)
    session.end()
    session.destroy()
    

  3. Afficher la transaction la plus récente d’un compte, avec ses détails

    #!/usr/bin/python
    import datetime, gnucash
    FILE = "/chemin/de/mon/fichier/GnuCash"
    COMPTE = "label du compte dans GnuCash"
    
    session = gnucash.Session(FILE, ignore_lock=True, is_new=False)
    book = session.book
    a = book.get_root_account().lookup_by_name(COMPTE)
    end, last = None, None
    for s in a.GetSplitList():
    	cur = s.parent.GetDate()
    	if not end or cur > end:
    		end, last = cur, s
    t = s.parent
    t_date = datetime.date.fromtimestamp(end).strftime('%d/%m/%Y')
    target = s.GetOtherSplit().GetAccount().GetName()
    print "%s %.2f > %s : %s" % (t_date, s.GetAmount().to_double(), target, t.GetDescription())
    session.end()
    session.destroy()