科技 · 實用指南
Calibre 的 CSV 目錄漏掉閱讀器獨有書籍?匯出裝置快取清單
電腦書庫目錄可能漏掉只在閱讀器上的書。先複製裝置快取,再核對匯出列數、儲存位置和試算表匯入設定。

想把閱讀器上的書列成 CSV,電腦書庫的目錄可能不是你需要的清單。在書庫中使用 ondevice:true,仍從書庫已有紀錄開始,不會補入只存在於裝置上的書。
如果已有可讀取的 metadata.calibre 或 .metadata.calibre,下述只處理副本的方法能匯出其中的快取紀錄,無須把電子書內容匯入電腦書庫。它是快取清單,不能保證列出全部雲端購買項目或所有閱讀器上的全部檔案。
記錄儲存位置,再複製快取
僅在裝置或受管理資料夾提供本機 Calibre 格式 JSON 快取時使用。讓目前 Calibre 裝置掃描和工作結束,記錄所列儲存位置,並在清除篩選後記錄 Device 檢視的數量,再關閉可能改寫快取的應用程式。正常掃描可能更新快取;轉換命令只讀取電腦上的副本。這不是鑑識用的全程唯讀擷取流程。
把快取複製到電腦的新資料夾,命名為 metadata-copy.json,原檔案留在原處。記錄原目錄、儲存標籤和複製時間。主記憶體和儲存卡可能各有快取,要分別處理並使用不同輸出名稱。沒有可讀快取就停止本方法,不要把電腦書庫的匯出冒充完整裝置清單。不要用這個 JSON 取代 metadata.db。
每筆快取紀錄匯出一列 CSV
已安裝 Python 3 時,在副本資料夾開啟終端機;Windows 把 python3 改成 py -3。將下面命令當作一整行複製,保留直引號,並選擇新的輸出檔名。它要求輸入為 JSON 陣列,且每筆紀錄的 lpath 是字串;所有紀錄都會保留,已有 CSV 不會被覆寫。
python3 -c "import csv,json,sys; r=json.load(open(sys.argv[1],encoding='utf-8-sig')); assert isinstance(r,list) and all(isinstance(b,dict) and isinstance(b.get('lpath'),str) for b in r), 'Expected an array of records with lpath'; f=open(sys.argv[2],'x',encoding='utf-8-sig',newline=''); w=csv.writer(f); w.writerow(['row','lpath','title','authors_json','series','series_index']); w.writerows([[i,b['lpath'],b.get('title'),json.dumps(b.get('authors'),ensure_ascii=False),b.get('series'),b.get('series_index')] for i,b in enumerate(r,1)]); f.close(); print(len(r),'cache rows exported')" "metadata-copy.json" "device-cache.csv"
六欄依序為 row、lpath、title、authors_json、series、series_index。作者作為一個 JSON 值放在同一儲存格,多名作者不會擴成多列;null 表示快取沒有值。row 只是目前快照中的位置,不是永久書籍編號。缺少的系列欄位保持空白,小數系列序號也保留。輸入不合要求或目標檔案已存在會報錯:檢查輸入或另選輸出名稱,不要靠刪除來源快取解決。
以文字匯入並核對清單
在 LibreOffice Calc 選擇「檔案 > 開啟」和「文字 CSV」。文字匯入視窗選擇 UTF-8、逗號分隔及直雙引號作為文字分隔符號。關閉「合併分隔符號」「修剪空格」和「計算公式」,把預覽中的六欄都設為「文字」後確認。視窗未出現時,在開啟檔案視窗啟用「編輯篩選器設定」。這樣能保留中繼資料字串,避免以 = 開頭的書名變成公式。
把命令印出的快取列數與 CSV 資料列數對照,不包含標題列。圖示的模擬樣本有三筆快取紀錄,即使兩筆路徑相同,也必須得到三列。不要數文字檔的實體行:帶引號的書名可能包含換行。先保留重複紀錄,再調查原因。核對熟悉的書名、完整 lpath,以及該路徑在記錄的原儲存位置中的實際檔案;複製快取不會改變路徑的起點。
釐清清單無法證明什麼
Device 檢視中有項目未列出或數量不符時,檢查篩選、所選儲存、掃描是否結束及快取時間。USB 大量儲存驅動程式只掃描設定的目錄和支援的格式,並非通用全碟掃描。舊快取可能還記著已刪除檔案。同一書名的兩種格式是兩個檔案紀錄;書名相同不能證明是同一本書,也不能證明已在目前電腦書庫中。
KOReader 也能寫入並精簡這些快取,所以自訂中繼資料缺失不代表電子書消失。保留原 JSON 和 CSV,註明儲存位置與複製時間。我們實際測試了這條轉換命令,模擬樣本涵蓋 Unicode、逗號、多行書名、空作者、小數序號、重複路徑、空陣列、無效輸入和拒絕覆寫;沒有測試實體閱讀器或 Calc 介面。需要電子書備份或雲端書庫清單時,僅憑這張表不夠。
