テクノロジー · 実用ガイド
digiKamの保存済み選択リストをCSVに:完全なパスを残す
保存された表示URLと同名ファイルを表のスナップショットに残します。写真はコピーせず、選択リストを出力成功の証明にしません。

digiKamで選んだ写真を表にしたい場合、フォルダー一覧では目的が違います。未選択のファイルを含んだり、直前の選択が失われたりするためです。出力ツールの「リストを保存」はXMLの選択スナップショットを作ります。
以下のオフライン変換は保存済みの完全な表示URLと順序を2列のCSVに保ちます。写真のコピー、データベース照会、全メタデータ保存、後の写真出力の成功証明は行いません。
写真の出力ではなくツールのリストを保存する
目的の写真を選び、Export > Export to local storageを開きます。現在のマニュアルでは、最初にアイコン表示で選んだ項目が入ります。実際のリストと件数を確認してください。フィルター、グループ、追加項目、古い選択によって期待と異なることがあります。
ファイルリストの下にSave the listがある場合、新しいローカルファイルselection.xmlへ保存します。元の利用者議論でこの操作が説明され、現在の保存関数全体ではImagesルートとurl属性付きImage項目を書きます。操作がない版や別形式なら中止し、任意のXMLを同じリストとして扱いません。現在のdigiKam画面は実行していません。
一覧だけが目的なら、写真転送を開始せず画面を閉じます。ローカル出力のコピー、リンク、縮小、出力メタデータ変更は別の処理です。元XMLを残し、版、選択の目的、時刻、件数を別に記録します。オフライン変換で写真やデータベースを変更する必要はありません。
自分で作ったUTF-8 XMLコピーを変換する
自分が保存したリストだけを使い、他人から渡されたXMLは使いません。Python 3があるLinux Bash端末でselection.xmlのフォルダーに移動し、次の命令を直線引用符とバックスラッシュを保った1行でコピーします。新しいCSV名を選び、既存出力は拒否されます。
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"
2列はordinalとurl_displayです。ordinalはXML項目順に1から始まるスナップショットの行識別子で、digiKamデータベースの画像IDではありません。出力作成前にImagesルート、直接のImage子要素、空でないurlを検証します。入れ子のImageやDOCTYPEは拒否します。プラグイン設定や追加属性は意図的に出力しないため、XMLを残します。
URLを文字列のまま保ち行を確認する
digiKamはQUrlの表示形式を書きます。XML解析は&などの記法を属性文字列に1度戻し、その後はパス分割、パーセント列の復号、空白除去、重複削除をしません。表示URLは自動的にローカルパスやシェル命令にはなりません。コピー、改名、削除する命令にセルを貼り付けないでください。
別フォルダーの同名ファイルは完全URLの別レコードとして残し、同じ完全URLが重複しても残します。命令はCSVを読み直して全番号とURLを入力に照合してから成功を表示します。保存時のツール件数と比べ、別フォルダーの同名を含む複数の完全URLを確認します。保存済みレコードの変換は検証できますが、元の選択漏れは分かりません。
LibreOffice CalcでUTF-8、コンマ、半角の二重引用符の文字列区切りを選びます。区切り結合、空白除去、数式評価をオフにし、両列をテキストにします。画面が省略されるなら開く際にフィルター設定編集を有効にします。並べ替えや絞り込みはコピーで行い、未変更CSVを残します。
失敗に対処し選択と納品の証拠を分ける
不正XML、違うルート、空リスト、URL欠落、入れ子Imageは出力作成前に停止します。既存出力エラーには新しい名前を選びます。書き込みや読み直しに失敗した部分CSVは使わず、別名で再実行します。ファイルが存在するだけでは成功ではありません。HTMLギャラリーやデータベース出力など別XMLは対象外です。
この正確なLinux Bash命令で13件の人工データ検証を実行し、Unicode、コンマと引用符、同名とURL重複、パーセント列、Windows/ネットワークURL文字列、不正入力、プラグイン情報の意図的除外を確認しました。有効な2件入力の5ケースでは2度目の書き込み拒否と出力不変も確認しました。digiKam、Qt、Calcの実行やWindows/macOSでの命令実行はしていません。
保存リストはその時点の選択です。実際の納品は別に出力結果と宛先ファイルを確認してください。このCSVには成功状態やハッシュはありません。再利用するギャラリー選択には既存のタグやラベルも有効です。完全な説明、評価などが必要なら適切なメタデータ/データベース手順を使い、2列にそれらが入ると思わないでください。
