…esto no es un subtítulo…
2026-07-27
He aprendido a hacer cuatro cosas con los bindings de Python del programa de contabilidad Gnucash. Una cosa que puede hacerse es un renombrado masivo de asientos, que es algo que puede ser útil si queremos enmendar alguna decisión desafortunada a la hora de nombrar los conceptos en nuestra contabilidad doméstica. He aquí unas instrucciones válidas para Gnucash 5 y Python 3 y un programa de ejemplo.
Lo que necesitamos para trabajar con un libro de cuentas está en el módulo gnucash. Podemos importarlo así:
import gnucash
Lo primero que hay que hacer es abrir una sesión. Digamos que tenemos un libro de cuentas, contabilidad.gnucash; podemos abrirlo así:
session = gnucash.Session("contabilidad.gnucash")
book = session.book
root = book.get_root_account()
Así hemos abierto una sesión (session), accedido al
libro de cuentas (book) y a la cuenta raíz
(root). La sesión puede abrirse así, lo que nos obligará a
guardar nuestros cambios (session.save()) y cerrarla
(session.end()); de forma alternativa, podemos abrirla
como un context manager.
Lo siguiente que hay que hacer es acceder a la cuenta que queremos tocar. Si, por ejemplo, esta cuenta es Gastos.Comida, la seleccionamos así:
account = root.lookup_by_full_name("Gastos.Comida")
Ahora podemos acceder a la cuenta (account) y listar
todos los desgloses o splits que le tocan
con account.GetSplitList(). A partir de estos desgloses,
podemos acceder a los asientos o transacciones que afectan a la cuenta
y cambiar las descripciones. Por ejemplo, si queremos corregir una
errata en la hemos escrito Pann
en vez de Pan
, podemos
hacer lo siguiente:
for split in account.GetSplitList():
transaction = split.GetParent()
if transaction.GetDescription() == "Pann":
transaction.SetDescription("Pan")
Finalmente, guardamos y cerramos la sesión:
session.save()
session.end()
He recogido lo expuesto arriba en un pequeño programa: batch_rename_transactions.py
El programa puede usarse directamente como una herramienta de línea de órdenes normal (que muestra la ayuda con la opción --help) o como una función que puede llamarse desde código de Python. Es un poquito más complicado que lo descrito arriba, ya que usa expresiones regulares para hacer el renombrado.
Categorías: Informática