Watch at Ease看见世界,读懂生活。

科技 · 实用指南

把 qBittorrent 的 Content 文件清单导出为 CSV,不改下载设置

保存单个任务的文件响应,保留索引、跳过下载项和进度比例,再核对表格记录。

比较任务摘要、逐文件 API 响应和本地文件夹列表的原创示意图
原创示意图:本流程的逐文件记录来自 files 响应。 Watch at Ease

种子任务名称列表,不等于某个任务内部的文件清单。想在表格里搜索庞大的 Content 目录树,并包含“不要下载”的项目,应使用逐文件响应;文件夹列表可能漏掉尚未下载的文件。

以下方法读取已配置、已正常登录的本机 WebUI 中的现有任务,再离线转换保存的 JSON 副本。它不添加任务、不改优先级、不下载内容,也不核验磁盘文件。

保存单个任务的正确响应

仅用于你自己的 qBittorrent 5,以及已经能正常登录的本机 WebUI。保留正常认证与保护。若同一电脑的地址为 http://127.0.0.1:8080,打开并正常登录;实际端口不同就使用实际端口。尚未配置 WebUI 时停止本方法,不要为此公开暴露服务或关闭认证。

在同一已登录浏览器打开 http://127.0.0.1:8080/api/v2/torrents/info,找到目标任务并复制其 hash 字段;名称重复时核对正确记录。随后打开 http://127.0.0.1:8080/api/v2/torrents/files?hash=YOUR_HASH,把 YOUR_HASH 换成准确哈希。主机和端口与登录地址相同,不加 indexes,以免缩小为部分文件。

将完整 JSON 响应保存为本地 files.json,或把全部原始响应复制到 UTF-8 纯文本文件。它必须是文件对象数组,不是登录页、HTML 查看器标记或任务摘要数组。另记任务身份与采集时间。空数组可能表示元数据尚不可用;任务不存在或认证失败,不等于有效的空清单。

转换已保存的文件记录

已安装 Python 3 时,在该文件夹打开终端;Windows 用 py -3 替代 python3。将命令复制为一整行,保留直引号,选择新的 CSV 名称,不使用 Python 的 -O 选项。验证在打开输出前结束,独占创建会拒绝已有目标。

python3 -c "import csv,json,math,sys; r=json.load(open(sys.argv[1],encoding='utf-8-sig')); ok=lambda b:isinstance(b,dict) and type(b.get('index')) is int and b['index']>=0 and isinstance(b.get('name'),str) and type(b.get('size')) is int and b['size']>=0 and type(b.get('progress')) in (int,float) and math.isfinite(b['progress']) and 0<=b['progress']<=1 and type(b.get('priority')) is int and b['priority'] in (0,1,6,7); assert isinstance(r,list) and r and all(ok(b) for b in r) and len({b['index'] for b in r})==len(r), 'Expected nonempty unfiltered files array with unique indexes'; f=open(sys.argv[2],'x',encoding='utf-8-sig',newline=''); w=csv.writer(f); w.writerow(['index','name','size_bytes','progress_fraction','priority']); w.writerows([[b[k] for k in ('index','name','size','progress','priority')] for b in r]); f.close(); print(len(r),'file records exported')" "files.json" "content-files.csv"

五列依次为 index、name、size_bytes、progress_fraction、priority。index 是原文件索引,不是新行号,排序后不要重新编号;name 包含相对路径。进度 0.25 表示 25%,不是 0.25%;优先级 0 为不要下载、1 为普通、6 为高、7 为最高。所有返回项目都会保留,包括跳过的文件、零字节文件和重复的基本文件名。

按文本导入并核对记录

在 LibreOffice Calc 选择“文件 > 打开”和“文本 CSV”,设 UTF-8、逗号分隔、直双引号文本分隔符。关闭“合并分隔符”“修剪空格”和“计算公式”,预览中五列全部设为“文本”。窗口不出现时,打开文件时启用“编辑筛选器设置”。这样能保留名称和值,避免以 = 开头的文件名变成公式。

比较命令打印的数量与 CSV 数据行数,不含表头。带引号的文件名可能有换行,因此物理文本行数不是记录数。对照未筛选的 Content 视图检查多个完整相对路径与原索引,包含跳过项。图示索引 0 和 1 是模拟例子;索引 0 是第一个文件,不是 CSV 表头或新的表格行号。制作排序或筛选副本前,保留未改动的主 CSV。

正确理解错误与范围

验证报错表示文件为空、格式错误、索引重复,或缺少合要求的名称、大小、进度、优先级。重新检查准确的 files 响应与元数据是否就绪,不要删除验证来强行输出。目标已存在时换新文件名。磁盘或写入故障可能留下不完整 CSV;成功重跑并核对解析后的行数之前,不要使用。

这只是采集时的客户端元数据清单,不证明文件存在、字节完整、对端可用,也不是可恢复的断点备份。项目和进度之后会变化,相对名称不是独立的绝对磁盘路径。我们实际运行了 13 项模拟转换检查,覆盖 Unicode、逗号、引号、多行名称、非连续索引、重复项、零值、无效输入与拒绝覆盖;未运行真实 qBittorrent、浏览器或 Calc 界面。保留 JSON 和采集备注,只分享你确实愿意披露的元数据。

显示两个原文件索引和优先级零项保留在 CSV 中的原创示意图
原创示意图:模拟索引 0 和 1 保持不变,跳过下载项仍保留。 Watch at Ease