Tecnología · GUÍA PRÁCTICA
Pasa la selección guardada de digiKam a CSV sin perder rutas completas
Conserva cada URL mostrada y los nombres repetidos en una instantánea de hoja de cálculo, sin copiar fotos ni afirmar que la exportación terminó.

Para una hoja de las fotos seleccionadas en digiKam, un listado de carpeta responde otra cosa: puede incluir archivos no seleccionados y perder la selección recién hecha. El control Guardar lista de la herramienta de exportación crea una instantánea XML.
La conversión sin conexión conserva las URL mostradas completas y su orden en dos columnas CSV. No copia fotos, consulta la base de datos, conserva todos los metadatos ni demuestra que una exportación posterior de fotos haya terminado correctamente.
Guarda la lista de la herramienta, no la exportación de fotos
Selecciona las fotos previstas y abre Export > Export to local storage. El manual actual dice que inicialmente incluye los elementos seleccionados en la vista de iconos. Revisa la lista real y su recuento: filtros, grupos, elementos añadidos o una selección antigua pueden hacerla distinta de lo esperado.
Si aparece Save the list debajo de la lista de archivos, guarda en un nuevo archivo local selection.xml. La discusión original de usuarios documenta el control y la función actual completa escribe una raíz Images con entradas Image y atributo url. Si tu versión carece del control o produce otro formato, detente; no trates cualquier XML como esa lista. No hemos ejecutado la interfaz actual de digiKam.
Si solo necesitas una lista, cierra el diálogo sin iniciar la transferencia de fotos. Exportar localmente puede copiar, enlazar, redimensionar o cambiar metadatos de salida: son operaciones separadas. Conserva el XML y anota aparte versión, propósito de selección, hora y recuento. No necesitas editar fotos originales ni la base de datos para convertir sin conexión.
Convierte tu propia copia XML UTF-8
Usa solo una lista que hayas creado, no XML recibido de otra persona. En una terminal Bash de Linux con Python 3, entra en la carpeta de selection.xml. Copia el comando en una línea, conservando comillas rectas y barras inversas. Elige un CSV nuevo; rechaza un destino existente.
python3 -c "exec('import csv\\nimport pathlib\\nimport sys\\nimport xml.etree.ElementTree as ET\\n\\nraw = pathlib.Path(sys.argv[1]).read_text(encoding=\"utf-8-sig\")\\nif \"<!DOCTYPE\" in raw.upper():\\n raise ValueError(\"Use only your own saved list without a DOCTYPE\")\\nroot = ET.fromstring(raw)\\nitems = root.findall(\"Image\")\\nif root.tag != \"Images\" or not items or len(list(root.iter(\"Image\"))) != len(items):\\n raise ValueError(\"Expected Images with direct Image entries, not nested images\")\\nurls = [item.get(\"url\") for item in items]\\nif any(not isinstance(url, str) or not url for url in urls):\\n raise ValueError(\"Every Image must have a nonempty url\")\\nwith open(sys.argv[2], \"x\", encoding=\"utf-8-sig\", newline=\"\") as destination:\\n writer = csv.writer(destination)\\n writer.writerow([\"ordinal\", \"url_display\"])\\n writer.writerows(enumerate(urls, 1))\\nwith open(sys.argv[2], encoding=\"utf-8-sig\", newline=\"\") as output:\\n parsed = list(csv.reader(output))\\nif parsed != [[\"ordinal\", \"url_display\"]] + [[str(i), url] for i, url in enumerate(urls, 1)]:\\n raise ValueError(\"Output did not round-trip: discard it and use a new output name\")\\nprint(len(urls), \"selection records exported and read back; not an export receipt\")\\n')" "selection.xml" "selection.csv"
Las dos columnas son ordinal y url_display. ordinal empieza en 1 y sigue el orden XML: identifica una fila de la instantánea, no el ID de imagen de la base de datos. Antes de crear salida valida la raíz Images, las entradas Image directas y cada url no vacía. Rechaza Image anidados o DOCTYPE. Omite deliberadamente ajustes de complementos y atributos extra de cada imagen; conserva el XML.
Mantén las URL literales y comprueba filas
digiKam escribe la representación mostrada de QUrl. El análisis XML convierte una vez escapes como & en texto del atributo; después conserva el texto sin dividir rutas, decodificar secuencias porcentuales, recortar ni eliminar duplicados. Una URL mostrada no se convierte automáticamente en ruta local o comando. No pegues celdas en comandos para copiar, renombrar o borrar archivos.
Los nombres iguales en carpetas distintas siguen como URL completas separadas; incluso una URL completa repetida mantiene registros separados. El comando relee el CSV y compara cada ordinal y URL con la entrada antes de anunciar éxito. Compara el recuento con la lista guardada y revisa varias URL completas, incluidos nombres iguales de distintas carpetas. Esto verifica la conversión de registros guardados, no detecta fotos omitidas en la selección original.
En LibreOffice Calc usa UTF-8, coma y comillas dobles rectas como delimitador de texto. Desactiva Combinar delimitadores, Recortar espacios y Evaluar fórmulas; pon ambas columnas como Texto. Si no aparece el diálogo, activa Editar configuración de filtros al abrir. Ordena o filtra otra copia y conserva el CSV maestro intacto.
Gestiona fallos y distingue selección de entrega
XML malformado, raíz incorrecta, lista vacía, URL ausentes o Image anidados detienen la ejecución antes de crear salida. Si el destino existe, usa otro nombre. Ante fallo de escritura o relectura, descarta el CSV parcial y repite con otro nombre; que un archivo aparezca no significa éxito. Otros XML, como galerías HTML o exportaciones de base de datos, quedan fuera.
Ejecutamos 13 casos sintéticos con este comando Bash de Linux exacto: Unicode, comas y comillas, nombres y URL repetidos, secuencias porcentuales literales, texto de URL Windows/red, entradas erróneas y omisión deliberada de datos de complementos. Los cinco casos válidos de dos registros también rechazaron una segunda escritura sin cambiar la salida. No ejecutamos digiKam, Qt ni Calc, ni el comando en Windows o macOS.
La lista guarda lo seleccionado en ese momento. Para demostrar la entrega, comprueba aparte el resultado de exportación y los archivos de destino; este CSV no aporta estados de éxito ni hashes. Las etiquetas y marcas existentes siguen siendo alternativas útiles para selecciones reutilizables. Para descripciones, valoraciones u otros metadatos completos, usa el método apropiado de metadatos/base de datos; no supongas que están en estas dos columnas.
