Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

전체 경로를 보존하며 digiKam 저장 선택 목록을 CSV로 바꾸기

저장된 표시 URL과 같은 파일명을 표의 스냅샷에 보존합니다. 사진을 복사하거나 선택 목록을 내보내기 성공 증거로 삼지 않습니다.

선택 목록 저장과 실제 사진 전송을 구별하는 원본 일러스트
원본 일러스트: 목록 저장과 사진 복사는 별도이며 목록은 전달 완료를 증명하지 않습니다. Watch at Ease

digiKam에서 선택한 사진을 표로 만들려면 폴더 목록은 다른 답입니다. 선택하지 않은 파일이 포함되거나 방금 만든 선택이 사라질 수 있습니다. 내보내기 도구의 목록 저장은 XML 선택 스냅샷을 만듭니다.

아래 오프라인 변환은 저장된 전체 표시 URL과 순서를 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 폴더로 이동합니다. 다음 명령을 곧은 따옴표와 역슬래시를 보존한 한 줄로 복사하고 새 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"

두 열은 ordinal과 url_display입니다. ordinal은 XML 항목 순서대로 1부터 시작하는 스냅샷 행 식별자이며 digiKam 데이터베이스 이미지 ID가 아닙니다. 출력 생성 전에 Images 루트, 직접 자식 Image와 비어 있지 않은 url을 검증합니다. 중첩 Image나 DOCTYPE은 거부합니다. 플러그인 설정과 추가 속성은 의도적으로 내보내지 않으므로 XML을 보관하세요.

URL을 그대로 보존하고 행 확인하기

digiKam은 QUrl의 표시 형식을 저장합니다. XML 파싱은 &amp; 같은 표기를 속성 텍스트로 한 번 되돌린 뒤 경로 분할, 퍼센트 시퀀스 디코딩, 공백 제거나 중복 제거를 하지 않습니다. 표시 URL은 자동으로 로컬 경로나 셸 명령이 되지 않습니다. 셀을 복사·이름 변경·삭제 명령에 붙여 넣지 마세요.

다른 폴더의 같은 파일명은 별도 전체 URL 기록으로 남고 완전히 같은 URL도 각각 보존됩니다. 명령은 CSV를 다시 읽고 모든 순번과 URL을 입력에 대조한 뒤 성공을 출력합니다. 저장 당시 도구 개수와 비교하고 다른 폴더의 동명 파일을 포함해 여러 전체 URL을 확인하세요. 저장 기록의 변환은 검증하지만 처음 선택에서 빠진 사진은 찾지 못합니다.

LibreOffice Calc에서 UTF-8, 쉼표, 곧은 큰따옴표 문자열 구분을 선택합니다. 구분자 병합, 공백 제거, 수식 평가를 끄고 두 열을 텍스트로 지정하세요. 창이 생략되면 열 때 필터 설정 편집을 켭니다. 정렬과 필터는 별도 복사본에서 하고 변경하지 않은 CSV 원본을 남깁니다.

실패 처리와 선택·전달 증거 구별하기

잘못된 XML, 다른 루트, 빈 목록, URL 누락이나 중첩 Image는 출력 생성 전에 중단됩니다. 출력이 이미 있으면 새 이름을 고르세요. 쓰기나 재읽기가 실패하면 부분 CSV를 버리고 새 이름으로 다시 실행합니다. 파일이 생긴 것만으로 성공은 아닙니다. HTML 갤러리 설명이나 데이터베이스 내보내기 등 다른 XML은 범위 밖입니다.

이 정확한 Linux Bash 명령으로 13개 합성 사례를 실행해 유니코드, 쉼표·따옴표, 같은 이름·중복 URL, 원래 퍼센트 시퀀스, Windows·네트워크 URL 텍스트, 잘못된 입력과 플러그인 데이터의 의도적 제외를 확인했습니다. 유효한 두 기록 사례 다섯 개는 두 번째 쓰기 거부와 출력 불변도 확인했습니다. digiKam·Qt·Calc를 실행하거나 Windows·macOS에서 명령을 시험하지는 않았습니다.

저장 목록은 당시 선택 항목을 기록합니다. 실제 전달은 별도로 내보내기 결과와 대상 파일을 확인하세요. CSV에는 성공 상태나 해시가 없습니다. 재사용 갤러리 선택에는 기존 태그·라벨도 유효합니다. 전체 설명·평점 등의 메타데이터가 필요하면 적합한 메타데이터나 데이터베이스 절차를 쓰고 두 열에 모두 들어 있다고 가정하지 마세요.

서로 다른 전체 URL의 같은 파일명을 보존한 원본 일러스트
원본 일러스트: 가상 IMG.jpg 두 개는 전체 URL이 달라 각각 보존됩니다. Watch at Ease