Python trae todo lo necesario para escribir XML en la biblioteca estándar: xml.etree.ElementTree. Se construye el árbol en memoria y se escribe de una vez.
También te puede interesar
El árbol
import xml.etree.ElementTree as ET
raiz = ET.Element("catalogo")
libro = ET.SubElement(raiz, "libro", id="1")
ET.SubElement(libro, "titulo").text = "El Quijote"
ET.SubElement(libro, "autor").text = "Cervantes & Saavedra"
arbol = ET.ElementTree(raiz)
ET.indent(arbol, space=" ")
arbol.write("catalogo.xml", encoding="utf-8", xml_declaration=True)catalogo.xml<?xml version='1.0' encoding='utf-8'?>
<catalogo>
<libro id="1">
<titulo>El Quijote</titulo>
<autor>Cervantes & Saavedra</autor>
</libro>
</catalogo>Element crea la raíz, SubElement cuelga hijos de un padre, los atributos van como parámetros con nombre y el texto se asigna a .text.
Tres detalles que importan
El ampersand se ha escapado solo. En el código pone Cervantes & Saavedra y en el archivo, &, que es lo correcto. Por eso no se escribe XML pegando cadenas: el primer dato con un & o un < produce un archivo que ningún programa sabe leer.
encoding="utf-8" y xml_declaration=True. Sin ellos, write escribe en ASCII —las eñes acaban como ñ— y sin la línea <?xml …?> del principio.
ET.indent, disponible desde Python 3.9, sangra el resultado. Sin él todo sale en una sola línea:
sin indent<?xml version='1.0' encoding='utf-8'?> <catalogo><libro id="1"><titulo>El Quijote</titulo><autor>Cervantes & Saavedra</autor></libro></catalogo>
Igual de válido y más pequeño. La sangría es para que lo lea una persona.
xml.etree.cElementTree. Todavía funciona, pero es un nombre antiguo que hoy apunta al mismo módulo: usa xml.etree.ElementTree. Y la salida que mostraba no correspondía al código: el código ponía atributo="algo" y la salida, atributo="blah".Más información en inglés: Create XML file in Python.
Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.
Hola, yo trabajo con la librería pygame que sirve para crear videojuegos pero estoy haciendo un juego muy largo y elaborado que necesita un sistema de guardado para que al cerrar el juego no se pierdan los datos.
Recurrí al xml y creo que todo eso está bien pero tienen una idea específicamente para «guardar progreso» en python?
No se cuantos datos debes guardar, pero quizás en una estructura JSON te sea mas fácil, ya que es mas «convertible» a diccionario, que te da un acceso mas rapido a lo que quieras cambiar.