qsv
qsv 是一款专为处理表格数据(如 CSV、Excel 等)打造的高性能命令行工具集。它旨在解决用户在面对海量数据时,传统软件加载缓慢、操作繁琐或内存不足的痛点,让数据的查询、切片、排序、过滤、转换、验证及合并等操作变得简单高效。
无论是需要快速清洗日志的数据工程师、进行探索性分析的研究人员,还是希望在终端流畅处理大文件的开发者,qsv 都能成为得力的助手。即使是不熟悉编程的普通用户,也能通过其简洁直观的指令轻松完成复杂的数据整理任务。
qsv 最显著的技术亮点在于其“极速”特性。基于 Rust 语言编写,它充分利用多核处理器优势,处理速度远超同类工具,即便在普通笔记本电脑上也能秒级处理百万行级别的数据。此外,qsv 的命令设计遵循“可组合”原则,用户可以像搭积木一样将多个命令串联,灵活构建复杂的数据处理流程。它还支持丰富的文件格式,并内置了数据质量检查与文档生成等功能,帮助用户更好地遵循 FAIR 数据原则,让数据管理更加规范有序。
使用场景
某电商数据分析师需要在凌晨处理来自多个仓库的 5GB 销售流水 CSV 文件,进行清洗、去重、关联商品表并生成日报,且必须在 1 小时内完成以赶上早会。
没有 qsv 时
- 使用 Python Pandas 加载大文件时频繁遭遇内存溢出(OOM),不得不将大文件拆分成小块手动处理,代码逻辑复杂且易错。
- 简单的字段筛选和格式转换需要编写数十行脚本,调试耗时,且每次需求微调都要重新运行整个流程。
- 多表关联(Join)操作在本地笔记本上运行极慢,往往需要数小时才能完成,严重依赖公司重型数据库集群资源。
- 数据验证缺乏统一标准,只能靠肉眼抽样或编写复杂的正则脚本,容易遗漏异常值导致报表数据不准。
- 跨平台协作困难,Windows 和 Linux 环境下的脚本兼容性差,同事复现分析结果时常遇到依赖冲突问题。
使用 qsv 后
- 利用 qsv 的流式处理能力,直接在不占用大量内存的情况下秒级读取并处理 5GB 文件,彻底告别内存溢出烦恼。
- 通过组合
select、rename和fmt等简单命令,一行指令即可完成字段清洗与格式化,修改逻辑只需调整参数无需重写代码。 - 使用
join命令在本地即可实现百万行数据的极速关联,处理时间从数小时缩短至几分钟,不再依赖重型数据库。 - 内置
validate命令配合 JSON Schema,能自动拦截格式错误或缺失关键字段的记录,确保输出数据的绝对可靠性。 - 作为单一二进制文件,qsv 在所有主流操作系统上行为一致,团队成员可轻松复用相同的命令行流水线,协作效率大幅提升。
qsv 将原本繁琐耗时的数据清洗工程转化为简洁高效的命令行流水线,让大数据处理变得像操作小文件一样轻盈迅捷。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明(支持处理超大文件,具备外部排序和磁盘哈希去重功能以优化内存使用)

快速开始
qsv: 极速数据处理工具包
| 目录 | |
|---|---|
![]() Hi-ho “Quicksilver” 走起! 原始标志详情 * 基于 AI 重新构想的标志 * 活动标志存档 |
qsv 是一个用于查询、切片、排序、分析、过滤、丰富、转换、验证、连接、格式化、转换、聊天、使符合 FAIR 原则以及记录表格数据(CSV、Excel、等)的数据处理工具包。命令简单、可组合且___“极速”(https://github.com/dathere/qsv/discussions/1348)__. * 命令 * 安装:CLI • MCP 服务器 • Cowork 插件 * 快速游览 / 笔记本 / 课程与练习 * 常见问题解答 * 性能调优 * 👉 基准测试 🚀 * 环境变量 * 功能标记 * 目标/非目标 * 测试 * NYC SOD 2022/csv,conf,v8/PyConUS 2025/ csv,conf,v9/NYC SOD 2026 * **"我们是否实现了 ACI?"_** 系列 - 1 • 2 • 3 * 赞助商 |
快来 qsv.dathere.com 体验吧!
| 命令 | 描述 |
|---|---|
| apply✨ 📇🚀🧠🤖🔣👆 |
对给定的 CSV 列应用一系列字符串、日期、数学和货币转换。它还包含一些基础的 NLP 功能(相似度、情感分析、脏话检测、eudex、语言识别 和 姓名性别判断)。 |
| applydp✨ 📇🚀PostalCodes️ ( ) |
applydp 是 apply 的精简版,仅包含与 Datapusher+ 相关的子命令/操作(仅限 qsvdp 二进制变体)。 |
| behead | 去掉 CSV 文件的表头。 |
| blake3 🚀 |
计算或校验文件的 BLAKE3 哈希值。 |
| cat 🗄️ |
按行或按列拼接多个 CSV 文件。 |
| clipboard✨ 🖥️ |
从剪贴板获取输入或将输出保存到剪贴板。 |
| color✨ 🐻❄️🖥️ |
将表格数据以美观、彩色的格式输出,且始终适配终端窗口。除了 CSV 及其变种外,启用 polars 特性后还支持 Arrow、Avro/IPC、Parquet、JSON 数组和 JSONL 格式。 |
| count PostalCodes️🏎️🐻❄️ |
统计 CSV 文件的行数,并可选择性地计算记录宽度的统计信息。(对于一个 15GB、2800 万行的 NYC 311 数据集,在没有索引的情况下耗时 11.87 秒;使用索引则瞬间完成。)若启用了 polars 特性,则会使用 Polars 的多线程内存映射 CSV 读取器,即使无索引也能快速计数。 |
| datefmt PostalCodes️🚀PostalCodes️ |
使用 strftime 日期格式说明符 将识别出的日期字段(支持 19 种格式)格式化为指定的日期格式。 |
| dedup 🤯🚀PostalCodes️ |
去除重复的行(参见 extdedup、extsort、sort 和 sortcheck 命令)。 |
| describegpt 🌐🤖🪄PostalCodes️📚⛩️ ( ) |
利用可配置的 Mini Jinja 提示文件(resources/describegpt_defaults.toml),结合任何兼容 OpenAI API 的大模型(包括通过 Ollama、Jan 和 LM Studio 运行的本地模型),推断出“神经符号”式的数据字典、描述和标签,或对 CSV 文件提出问题。 (例如:Markdown、JSON、TOON、Everything、西班牙语、普通话、受控标签; --prompt "按社区委员会和行政区划分,每年前 10 大投诉类型是什么?" - 确定性的、无幻觉的 SQL RAG 结果;迭代式、基于会话的 SQL RAG 优化 - 优化后的 SQL RAG 结果) |
| diff 🚀 |
以惊人的速度找出两个 CSV 文件之间的差异! 例如:在不到 600 毫秒内比较两个各有 100 万行、9 列的 CSV 文件! |
| edit | 替换由行号和列号指定的单元格的值。 |
| enum PostalCodes️ |
添加一列,通过递增编号或 UUID 标识符为每一行编号。也可以用于复制某一列或用常量填充新列。 |
| excel 🚀 |
将指定的 Excel/ODS 工作表导出为 CSV 文件。 |
| exclude PostalCodes️PostalCodes️ |
根据指定的列,从一个 CSV 数据集中移除另一部分数据。 |
| explode PostalCodes️PostalCodes️ |
通过按给定分隔符拆分某一列的值,将一行拆分为多行。 |
| extdedup PostalCodes️ |
使用内存映射的 磁盘哈希表,从任意大小的 CSV/文本文件中去除重复行。与 dedup 命令不同,此命令不会将整个文件加载到内存中,也不会对去重后的文件进行排序。 |
| extsort 🚀PostalCodes️PostalCodes️ |
使用多线程的 外部归并排序 算法对任意大小的 CSV/文本文件进行排序。 |
| fetch✨ PostalCodes️🧠🌐 |
使用 HTTP Get 对每一行的数据发送/获取网络服务中的数据。配备 HTTP/2 自适应流量控制、jaq JSON 查询语言支持、动态限流(RateLimit)以及使用 Redis 或磁盘缓存实现的持久化缓存功能。 |
| fetchpost✨ PostalCodes️🧠🌐⛩️ |
类似于 fetch,但使用 HTTP Post(HTTP GET 与 POST 方法的区别)。支持 HTML 表单(application/x-www-form-urlencoded)、JSON(application/json)以及自定义内容类型,并能使用 Mini Jinja 模板引擎将 CSV 数据渲染到有效载荷中。 |
| fill PostalCodes️ |
填充空值。 |
| fixlengths | 强制 CSV 文件中的每条记录具有相同的长度,方法是填充或截断记录。 |
| flatten | CSV 记录的扁平化视图。适合逐条查看记录。 例如: qsv slice -i 5 data.csv | qsv flatten。 |
| fmt | 使用不同的分隔符、记录结束符或引用规则重新格式化 CSV。(支持 ASCII 分隔的数据。) |
| foreach✨ | 对给定 CSV 文件中的每一条记录执行一次 shell 命令。 |
| frequency PostalCodes️😣🏎️PostalCodes️🪄 ( ) |
构建各列的 频率分布表。如果存在索引,可利用多线程加速处理。(示例:CSV、JSON、TOON。) |
| geocode✨ PostalCodes️🧠🌐🚀PostalCodes️PostalCodes️🌎 |
根据可更新的本地 Geonames 城市数据库和 Maxmind GeoLite2 数据库,对位置进行地理编码。借助缓存和多线程技术,每秒可处理高达 36 万条记录! |
| geoconvert✨ 🌎 |
在各种空间格式与 CSV/SVG 之间进行转换,包括 GeoJSON、SHP 等。 |
| headers 🗄️ |
显示 CSV 文件的表头。或显示多个 CSV 文件之间的所有表头交集。 |
| index | 为 CSV 文件创建索引(PostalCodes️)。这一过程非常迅速(即使是 15GB、2800 万行的 NYC 311 数据集,也只需 14 秒即可完成索引),并且能够实现对 CSV 文件的常数时间索引和随机访问。有了索引后,count、sample 和 slice 命令可以瞬间执行;luau 命令启用随机访问模式;而 frequency、split、stats 和 schema 命令则可启用多线程处理(🏎️)。 |
| input | 按照特殊的注释、引用、修剪、跳行以及非 UTF-8 编码处理规则读取 CSV 数据。通常用于“规范化”CSV 文件,以便后续与其他 qsv 命令配合使用。 |
| join 😣PostalCodes️ |
内连接、外连接、右连接、交叉连接、反连接和半连接。自动创建简单的内存哈希索引,以提高速度。 |
| joinp✨ 🚀🐻❄️🪄 |
使用 Pola.rs 引擎执行内连接、外连接、右连接、交叉连接、反连接、半连接、非等值连接和 asof 连接。与 join 命令不同,joinp 可以处理超出内存容量的文件,支持多线程,具备连接键验证、保持行顺序选项、连接前后过滤、连接键 Unicode 规范化等功能,还支持“特殊”的 非等值连接 和 asof 连接(这对于时间序列数据尤其有用,详见 测试代码),并且其输出列可以合并。 |
| json PostalCodes️ |
将 JSON 数组转换为 CSV。 |
| jsonl 🚀PostalCodes️ |
将换行分隔的 JSON(JSONL/NDJSON)转换为 CSV。有关将 CSV 转换为 JSONL,请参阅 tojsonl 命令。 |
| lens✨PostalCodes️ 🐻❄️🖥️ |
使用 csvlens 引擎交互式地查看、搜索和筛选表格数据文件。除了 CSV 及其变种外,启用 polars 特性后还支持 Arrow、Avro/IPC、Parquet、JSON 数组和 JSONL 格式。 |
luau ( )✨PostalCodes️🌐PostalCodes️📚 ( ) |
通过对 CSV 文件的每一行执行 Luau 0.709 表达式/脚本来创建多个新的计算列、筛选行、计算聚合并构建复杂的数据管道(顺序模式),或者利用索引实现 随机访问(随机访问模式)。 可以处理单个 Luau 表达式,也可以运行包含查找表的完整数据清洗脚本(示例),这些脚本具有明确的 BEGIN、MAIN 和 END 部分。 这不仅仅是另一个 qsv 命令,它是 qsv 的 领域特定语言 (DSL),内置了众多 qsv 特有的辅助函数(详见源码),可用于构建生产级的数据管道。 |
| moarstats PostalCodes️🏎️ |
向现有的统计 CSV 文件中添加数十种额外的统计指标,包括扩展的异常值、稳健性和双变量统计。(示例。) |
| partition PostalCodes️ |
根据某一列的值对 CSV 文件进行分区。 |
| pivotp✨ 🚀🐻❄️🪄 |
对 CSV 数据进行透视。根据数据类型和统计信息自动选择“智能”聚合方式。 |
| pragmastat PostalCodes️🤯🪄 |
使用 Pragmastat 库计算实用统计。利用统计缓存自动过滤非数值列,并支持 Date/DateTime 列。 |
| pro | 与 qsv pro API 交互。 |
| prompt✨ 🐻❄️🖥️ |
打开文件对话框,以便选择输入文件或将输出保存到文件。 |
| pseudo PostalCodes️PostalCodes️ |
通过用递增标识符替换给定列的值,对该列的值进行 假名化。 |
| py✨ PostalCodes️PostalCodes️ |
通过在 CSV 文件的每一行上评估 Python 表达式来创建新的计算列或筛选行。Python 的 f-string 对于扩展格式化特别有用,还能评估 Python 表达式。 需要 Python 3.10 或更高版本。 |
| rename | 高效地重命名 CSV 文件的列。 |
| replace PostalCodes️PostalCodes️🏎️ |
使用正则表达式替换 CSV 数据。对每个字段单独应用正则表达式。 |
| reverse PostalCodes️🤯 |
反转 CSV 文件中各行的顺序。与 sort --reverse 命令不同,它会保留具有相同键的行的顺序。如果有索引,只需常量内存即可完成;否则,需要将所有数据加载到内存中。 |
| safenames ( ) |
修改 CSV 文件的表头,使其仅包含“安全”的名称(详见源码),确保这些名称“适合数据库”或“适合 CKAN”。 |
| sample PostalCodes️🌐🏎️ |
使用七种不同的抽样方法从 CSV 文件中随机抽取行(可选种子)——水库抽样(默认)、索引抽样、伯努利抽样、系统抽样、分层抽样、加权抽样 和 聚类抽样。支持从远程 URL 上的 CSV 文件中抽样。 |
| schema PostalCodes️😣🏎️PostalCodes️🪄🐻❄️ |
从 CSV 数据中推断出 JSON Schema Validation Draft 2020-12(示例)或 Polars Schema(示例)。在 JSON Schema Validation 模式下,它会生成一个 .schema.json 文件,其中包含从 stats 中推断出的数据类型和域/范围验证规则。如果存在索引,可利用多线程加速处理。有关如何使用生成的 JSON Schema 来验证类似 CSV 文件是否符合该模式,请参阅 validate 命令。启用 --polars 选项后,它会生成一个 .pschema.json 文件,所有 Polars 命令(sqlp、joinp 和 pivotp)都会使用该文件来确定每列的数据类型并优化性能。这两种模式均可编辑和微调。对于 JSON Schema,可以进一步完善推断出的验证规则;对于 Polars Schema,可以更改推断出的 Polars 数据类型。 |
| scoresql✨ 🐻❄️🪄 |
对 SQL 查询进行分析,结合 CSV 文件的缓存数据(stats、moarstats、frequency),在查询执行之前生成性能评分及可操作的优化建议。支持 Polars(默认)和 DuckDB 模式。 |
| search PostalCodes️PostalCodes️ |
对 CSV 文件运行正则表达式。只对选定的字段应用正则表达式,并仅显示匹配的行。 |
| searchset PostalCodes️PostalCodes️ |
在一次扫描中对 CSV 文件运行多个正则表达式。 对每个字段单独应用正则表达式,并仅显示匹配的行。 |
| select PostalCodes️ |
选择、重新排序、反转、复制或删除列。 |
| slice PostalCodes️PostalCodes️ |
从 CSV 文件的任意部分切取行。当存在索引时,只需解析切片内的行,而无需遍历切片开始之前的所有行。 |
| snappy 🚀🌐 |
使用 Google 的 Snappy 框架格式对输入进行流式压缩/解压缩(更多信息)。 |
| sniff PostalCodes️🌐🤖 ( ) |
快速嗅探并推断 CSV 元数据(分隔符、表头行、前置行数、引用字符、灵活性、是否为 UTF-8、平均记录长度、记录总数、内容长度以及如果是在 URL 上嗅探 CSV,则估算的记录数量、字段数、字段名称和数据类型)。它同时也是通用的 MIME 类型检测器。 |
| sort 🚀PostalCodes️PostalCodes️ |
按 字典序、自然排序、数值、逆序、唯一值或随机(可选种子)顺序对 CSV 数据进行排序(另请参阅 extsort 和 sortcheck 命令)。 |
| sortcheck PostalCodes️ |
检查 CSV 文件是否已排序。使用 --json 选项还可获取记录总数、排序中断次数和重复记录数。 |
| split PostalCodes️PostalCodes️ |
将一个 CSV 文件拆分为多个 CSV 文件。可以根据行数、块数或文件大小进行拆分。如果按行或块数拆分且存在索引,则可利用多线程加速处理。 |
| sqlp✨ PostalCodes️PostalCodes️ 🚀🐻❄️PostalCodes️🪄 |
在多个 CSV、Parquet、JSONL 和 Arrow 文件上运行 Polars SQL(PostgreSQL 的方言)查询——将查询转换为极速的 Polars LazyFrame 表达式,从而处理超出内存容量的 CSV 文件。查询结果可保存为 CSV、JSON、JSONL、Parquet、Apache Arrow IPC 和 Apache Avro 格式。 |
| stats PostalCodes️PostalCodes️ |
计算 汇总统计(总和、最小值/最大值/范围、排序顺序/排序程度、最小值/最大值/平均长度、均值、均值的标准误差 (SEM)、几何/调和平均数、标准差、方差、变异系数 (CV)、空值计数、最大精度、稀疏度、四分位数、四分位距 (IQR)、上下界、偏度、中位数、众数/反众数、基数和独特性比例)并为 CSV 中的每一列做出确定性的数据类型推断(空值、字符串、浮点数、整数、日期、日期时间、布尔值)(示例 — 更多信息)。 如果存在索引,可利用多线程加速处理(有了索引,可以在不到 7.3 秒内对纽约市 311 数据(15GB,2800 万行)进行“流式”统计!)。 |
| table 🤯 |
使用 弹性制表位对 CSV 输出进行对齐,便于查看;或创建“对齐的 TSV”文件或固定宽度格式文件。若需交互式查看 CSV 文件,请使用 lens 命令。 |
| template PostalCodes️PostalCodes️🚀PostalCodes️📚⛩️ ( ) |
使用 Mini Jinja 模板引擎,基于 CSV 数据渲染模板(示例)。 |
| to✨ 🚀🐻❄️PostalCodes️ |
将 CSV 文件转换为 Parquet、PostgreSQL、SQLite、Excel (XLSX)、LibreOffice Calc (ODS) 和 Data Package。 |
| tojsonl PostalCodes️PostalCodes️ |
智能地将 CSV 转换为换行分隔的 JSON(JSONL/NDJSON)。通过先扫描 CSV 文件,它会“智能”推断出每列合适的 JSON 数据类型。有关将 JSONL 转换为 CSV 的方法,请参阅 jsonl 命令。 |
| transpose PostalCodes️PostalCodes️ |
转置 CSV 文件的行/列。 |
| validate PostalCodes️PostalCodes️ 🚀🌐PostalCodes️📚PostalCodes️ ( ) |
使用 JSON Schema Validation (Draft 2020-12)验证 CSV 数据 极速(例如:使用 schema 命令生成的 纽约市 311 数据的模式,每秒可验证多达 780,031 行[^1]),并将无效记录放入单独的文件中,同时附上详细的验证错误报告。支持多种自定义 JSON Schema 格式和关键字: * currency 自定义格式,带有 ISO-4217 验证* dynamicEnum 自定义关键字,支持基于文件系统或 URL 上的 CSV 进行枚举验证(支持 http/https/ckan 和 dathere URL 方案)* uniqueCombinedWith 自定义关键字,用于验证跨多列的唯一性,以实现复合键验证。如果没有提供 JSON Schema 文件,则验证 CSV 是否符合 RFC 4180 标准且采用 UTF-8 编码。 |
✨: 由功能标志启用。
📇: 在可用时使用索引。
🤯: 将整个 CSV 文件加载到内存中,不过 dedup、stats 和 transpose 也有“流式”模式。
😣: 使用与 CSV 中列基数成比例的额外内存。
🧠: 昂贵的操作会被缓存,并为 fetch 命令提供会话间 Redis/磁盘缓存支持。
🗄️: 扩展输入支持。
🗃️: 有限的扩展输入支持。
🐻❄️: 命令由 向量化查询引擎驱动/加速。
🤖: 命令使用自然语言处理或生成式 AI。
🏎️: 多线程且/或在有索引(📇)时速度更快。
🚀: 即使没有索引也能多线程运行。
: 具备与 CKAN 适配的集成选项。
🌐: 具备网络感知选项。
🔣: 要求输入为 UTF-8 编码。
👆: 具备强大的列选择器支持。语法请参见 select。
🪄: “自动魔法”命令,利用统计和/或频率表实现更智能、更快速的操作。
📚: 具备查找表支持,可在运行时对本地或远程参考 CSV 文件进行“查找”。
🌎: 具备地理空间能力。
⛩️: 使用 Mini Jinja 模板引擎。
: 使用 Luau 0.709 作为嵌入式脚本化 DSL。
🖥️: 属于用户界面(UI)功能组
[^1]: 参见 validate_index 基准测试
安装选项
[!NOTE] 若要安装 qsv MCP 服务器及可选的 Claude Cowork 插件,请参阅入门指南。
选项 0: qsv pro
如果您更倾向于使用图形界面而非命令行来探索数据,不妨试试 qsv pro。qsv pro 基于 qsv 构建,只需简单地拖放文件即可快速分析电子表格数据,同时还提供许多其他交互式功能。更多信息请访问 qsvpro.dathere.com,或点击下方任意一个徽章直接下载 qsv pro。
选项 1:下载预编译二进制文件
适用于 Linux、macOS 和 Windows 的最新 qsv 版本的全功能预编译 二进制变体 已在 此处 提供下载,其中包括使用 Rust Nightly 编译的二进制文件(更多信息)。您可以根据您的平台点击下方的徽章,下载包含预编译二进制文件的 ZIP 压缩包。
针对 Apple Silicon、Windows for ARM、IBM Power Servers (PowerPC64 LE Linux) 以及 IBM Z 大型机 (s390x) 的预编译二进制文件启用了 CPU 优化(target-cpu=native),以进一步提升性能。
由于 x86_64 平台存在过多的 CPU 变体,容易导致非法指令(SIGILL)错误,因此我们未在该平台的预编译二进制文件中启用 CPU 优化。如果您仍然遇到 SIGILL 错误,发布 ZIP 压缩包中也包含了“便携式”二进制文件(所有 CPU 优化均被禁用),其文件名带有“p for portable”后缀,例如 qsvp、qsvplite 或 qsvpdp。
对于 Windows,我们还提供了一个用于 x86_64 MSVC qsvp 二进制文件的 MSI “简易安装程序”。下载并安装简易安装程序后,启动它并点击“Install qsv”,即可将最新的 qsvp 预编译二进制文件下载到已添加至您 PATH 环境变量的文件夹中。此后 qsv 即可完成安装,您可以在新的终端中直接使用。
对于 macOS,我们的二进制文件使用了“临时签名”来签署,因此您需要先设置适当的 Gatekeeper 安全设置,或者运行以下命令,在首次运行 qsv 之前移除其隔离属性:
# 如果您安装的是其他变体,请将 qsv 替换为 qsvmcp、qsvlite 或 qsvdp
xattr -d com.apple.quarantine qsv
使用预编译二进制文件的另一个优势是,它们启用了 self_update 功能,允许您通过简单的 qsv --update 命令快速将 qsv 更新至最新版本。为了进一步提高安全性,self_update 功能仅从 此 GitHub 仓库 获取发布版本,并在安装更新前自动验证下载的 ZIP 压缩包的签名。
[!NOTE]
musl预编译二进制文件中不包含luau功能[^3]。
手动验证预编译二进制文件 ZIP 压缩包的完整性
所有预编译二进制文件 ZIP 压缩包均使用 zipsign 进行签名,公钥为 qsv-zipsign-public.key。要验证下载的 ZIP 压缩包的完整性:
# 如果尚未安装 zipsign
cargo install zipsign
# 在下载 ZIP 压缩包和 qsv-zipsign-public.key 文件后,验证预编译二进制文件 ZIP 压缩包的完整性。
# 将 <PREBUILT-BINARY-ARCHIVE.zip> 替换为下载的 ZIP 压缩包名称。
# 例如:zipsign verify zip qsv-0.118.0-aarch64-apple-darwin.zip qsv-zipsign-public.key
zipsign verify zip <PREBUILT-BINARY-ARCHIVE.zip> qsv-zipsign-public.key
选项 2:包管理器与发行版
qsv 也被多个包管理器和发行版所分发。
以下是使用各种包管理器和发行版安装 qsv 的相关命令:
# Arch Linux AUR (https://aur.archlinux.org/packages/qsv)
yay -S qsv
# Homebrew on macOS/Linux (https://formulae.brew.sh/formula/qsv#default)
brew install qsv
# MacPorts on macOS (https://ports.macports.org/port/qsv/)
sudo port install qsv
# Mise on Linux/macOS/Windows (https://mise.jdx.dev)
mise use -g qsv@latest
# Nixpkgs on Linux/macOS (https://search.nixos.org/packages?channel=unstable&show=qsv&from=0&size=50&sort=relevance&type=packages&query=qsv)
nix-shell -p qsv
# Scoop on Windows (https://scoop.sh/#/apps?q=qsv)
scoop install qsv
# Void Linux (https://voidlinux.org/packages/?arch=x86_64&q=qsv)
sudo xbps-install qsv
# Conda-forge (https://anaconda.org/conda-forge/qsv)
conda install conda-forge::qsv
需要注意的是,这些包管理器或发行版提供的 qsv 支持的功能有所不同(例如,Homebrew 启用了 apply、fetch、foreach、geocode、lens、luau 和 to 等功能。不过,它会自动为 bash、fish 和 zsh shell 安装命令补全)。
要查看某个包或发行版中的 qsv 启用了哪些功能,可以运行 qsv --version(更多信息)。
秉承开源精神,这些软件包由志愿者维护,他们希望让 qsv 在各种环境中更容易安装。我们非常感谢他们的付出,并通过 GitHub 与这些包的维护者保持松散的合作关系,但请知悉,这些软件包是由第三方维护的。
Debian 软件包
datHere 还维护了一个针对 x86_64 架构上最新 Ubuntu LTS 的 Debian 软件包,以便更方便地与 DataPusher+ 一起安装 qsv。
在 Ubuntu/Debian 上安装 qsv 的步骤如下:
wget -O - https://dathere.github.io/qsv-deb-releases/qsv-deb.gpg | sudo gpg --dearmor -o /usr/share/keyrings/qsv-deb.gpg
echo "deb [signed-by=/usr/share/keyrings/qsv-deb.gpg] https://dathere.github.io/qsv-deb-releases ./" | sudo tee /etc/apt/sources.list.d/qsv.list
sudo apt update
sudo apt install qsv
选项 3:从源码编译
如果你已经安装了 Rust,就可以从源码编译[^2]:
git clone https://github.com/dathere/qsv.git
cd qsv
cargo build --release --locked --bin qsv --features all_features
编译后的二进制文件将位于 ./target/release/。
# 编译启用所有特性的 qsv
cargo build --release --locked --bin qsv --features feature_capable,apply,fetch,foreach,geocode,luau,mcp,magika,polars,python,self_update,to,ui
# 简写
cargo build --release --locked --bin qsv -F all_features
# 为当前 CPU 启用所有 CPU 优化(警告:生成的二进制文件不可移植)
CARGO_BUILD_RUSTFLAGS='-C target-cpu=native' cargo build --release --locked --bin qsv -F all_features
# 或者只启用 fetch 和 foreach 特性的 qsv
cargo build --release --locked --bin qsv -F feature_capable,fetch,foreach
# 针对 qsvmcp —— MCP 服务器优化变体
cargo build --release --locked --bin qsvmcp -F qsvmcp
# 针对 qsvlite
cargo build --release --locked --bin qsvlite -F lite
# 针对 qsvdp
cargo build --release --locked --bin qsvdp -F datapusher_plus
[^2]: 当然,你还需要链接器和 C 编译器。Linux 用户通常应根据其发行版的文档安装 GCC 或 Clang。例如,如果你使用 Ubuntu,可以安装 build-essential 包。在 macOS 上,可以通过运行 $ xcode-select --install 来获取 C 编译器。
对于 Windows,这意味着需要安装 Visual Studio 2022。在选择工作负载时,请包含“使用 C++ 的桌面开发”、Windows 10 或 11 SDK 以及英语语言包,同时根据需要添加其他语言包。
[!NOTE] 若要使用 Rust nightly 版本进行构建,请参阅 Nightly Release Builds。
feature_capable、qsvmcp、lite和datapusher_plus是互斥的特性。更多信息请参阅 Special Build Features。
变体
qsv 有五种二进制变体:
qsv—— 具备 特性能力(✨),预编译的二进制文件启用了除 Python 外的所有适用特性[^3]。qsvpy—— 与qsv相同,但启用了 Python 特性。有三个子变体可供选择:qsvpy311、qsvpy312 和 qsvpy313,分别使用最新补丁版本的 Python 3.11、3.12 和 3.13 进行编译。我们需要为每个 Python 版本提供一个二进制文件,因为 Python 是动态链接的(更多信息)。qsvmcp—— 针对 MCP(模型上下文协议) 服务器使用进行了优化,启用了 geocode、luau、mcp、polars、self_update 和 to 等特性。与qsv共享src/main.rs。qsvlite—— 所有特性均被禁用(约为qsv大小的 16%)。如果你是从 xsv 迁移过来,并希望获得相同的体验和功能集,那么这个变体非常适合你。qsvdp—— 针对与 DataPusher+ 一起使用进行了优化,仅包含与 DataPusher+ 相关的命令;嵌入了luau解释器;包含了applydp,即apply特性的精简版;禁用了--progressbar选项;并且自更新功能仅检查新版本,需要显式使用--update选项(约为qsv大小的 16%)。
[!NOTE] qsv 还有带有 “p” 后缀的“便携式”子变体——
qsvp、qsvplite和qsvpdp。这些子变体在编译时不启用任何 CPU 特性。如果你使用的是较旧的 CPU 架构,或者在运行常规 qsv 二进制文件时遇到 “非法指令 (SIGILL)” 错误,可以使用这些子变体。
[^3]: 默认情况下,预编译的二进制文件在 musl 平台上不会启用 luau 特性。这是因为我们使用基于 Ubuntu 20.04 LTS 的 GitHub Action Runners,并采用 musl libc 工具链进行交叉编译。然而,Ubuntu 是基于 glibc 的发行版,而非 musl。我们通过 交叉编译 来解决这个问题。
遗憾的是,这使得我们无法编译启用 luau 特性的二进制文件,因为那样需要静态链接主机操作系统的 libc 库。如果你需要在 musl 系统上使用 luau 特性,就需要在自己的 musl 基础 Linux 发行版(如 Alpine、Void 等)上自行从源码编译。
Shell 补全
qsv 提供了功能强大且可扩展的 shell 补全 支持。目前支持以下 shell:bash、zsh、powershell、fish、nushell、fig 和 elvish。您可以通过点击下方的任一徽章来下载适用于您所用 shell 的补全脚本:
如需自定义 shell 补全,请参阅 Shell 补全 文档。如果您使用的是 Bash,也可以按照 100.dathere.com 上的分步教程,学习如何启用 Bash shell 补全。
正则表达式语法
--select 选项以及多个命令(apply、applydp、datefmt、exclude、fetchpost、replace、schema、search、searchset、select、sqlp、stats 和 validate)允许用户指定正则表达式。我们使用 regex crate 来解析、编译和执行这些表达式。[^4]
[^4]: 这与 ripgrep 所使用的正则引擎相同——这款极速的 grep 替代工具为 Visual Studio 的神奇“在文件中查找”功能提供了支持。
其语法可在 这里 查看,并说明:“该语法与其他正则引擎类似,但缺少一些难以高效实现的功能,包括但不限于环视和反向引用。作为补偿,本 crate 中的所有正则搜索都具有最坏情况下的 O(m * n) 时间复杂度,其中 m 与正则表达式的大小成正比,n 与被搜索字符串的长度成正比。”
如果您想测试自己的正则表达式,regex101 支持 regex crate 所使用的语法。只需选择“Rust”模式即可。
JSON Schema 验证正则表达式说明:当
schema命令推断 JSON Schema 验证文件时,若使用了--pattern-columns选项,它会为选定的列生成一个正则表达式。虽然生成的正则表达式一定有效,但未必是最优的。
在将生成的 JSON Schema 文件用于生产环境的validate命令之前,建议用户根据需要检查并优化生成的正则表达式。
需要注意的是,在 JSON Schema 验证模式下,validate命令还可通过--fancy-regex选项支持带有环视和反向引用的“高级”正则表达式。
文件格式
qsv 支持 UTF-8/ASCII 编码的 CSV(.csv)、SSV(.ssv)和 TSV 文件(.tsv 和 .tab)。CSV 文件默认使用逗号(,)作为分隔符,SSV 文件使用分号(;)作为分隔符,而 TSV 文件则使用制表符(\t)作为分隔符。分隔符是一个单个 ASCII 字符,可以通过 --delimiter 命令行选项、QSV_DEFAULT_DELIMITER 环境变量来设置,或者在启用 QSV_SNIFF_DELIMITER 时自动检测。
当使用 --output 选项时,qsv 会将文件以 UTF-8 编码输出,并根据文件扩展名自动调整生成文件中的分隔符——即 .csv 文件使用逗号,.ssv 文件使用分号,.tsv 和 .tab 文件使用制表符。
JSON 文件会被识别,并通过 json 命令转换为 CSV 格式。JSONL 和 NDJSON 文件也会被识别,并分别通过 jsonl 和 tojsonl 命令进行 CSV 格式的相互转换。
fetch 和 fetchpost 命令在不使用 --new-column 选项时会生成 JSONL 文件;而在使用 --report 选项时,则会生成 TSV 文件。
excel、safenames、sniff、sortcheck 和 validate 命令在启用 JSON 选项时会生成符合 JSON API 1.1 规范 的 JSON 文件,从而返回详细的机器友好型元数据,可供其他系统使用。
schema 命令会生成一个带有 .schema.json 扩展名的 JSON Schema Validation (Draft 2020-12) 文件,该文件可与 validate 命令结合使用,以验证具有相同模式的其他 CSV 文件。
describegpt 和 frequency 命令都会生成 TOON 文件。TOON 是一种紧凑且易于阅读的 JSON 数据模型编码格式,专用于 LLM 提示词。
excel 命令支持 Excel 和 Open Document Spreadsheet(ODS)文件(.xls、.xlsx、.xlsm、.xlsb 和 .ods 文件)。
说到 Excel,如果您在使用 Excel 打开 qsv 生成的 CSV 文件时遇到问题,请设置 QSV_OUTPUT_BOM 环境变量,以便在生成的 CSV 文件开头添加一个 字节顺序标记。这是为了解决 Excel 的 UTF-8 编码检测缺陷。
to 命令可以将 CSV 文件转换为 Parquet、Excel .xlsx、LibreOffice/OpenOffice Calc .ods 以及 Data Package 格式,并将数据导入到 PostgreSQL 和 SQLite 数据库中。
sqlp 命令可以将查询结果以 CSV、JSON、JSONL、Parquet、Apache Arrow IPC 和 Apache AVRO 格式输出。Polars SQL 还支持通过其 read_csv、read_ndjson、read_parquet 和 read_ipc 表函数直接读取多种格式的外部文件。
sniff 命令还可以通过 --no-infer 或 --just-mime 选项检测任何文件的 MIME 类型,无论是本地文件还是远程文件(支持 http 和 https 协议)。它可以检测超过 130 种文件格式,包括 MS Office/Open Document 文件、JSON、XML、PDF、PNG、JPEG,以及 GPX、GML、KML、TML、TMX、TSX、TTML 等专业地理空间格式。完整的列表请点击 这里。
[!NOTE] 当启用
polars功能时,qsv 还可以直接读取.parquet、.ipc、.arrow、.json和.jsonl文件。
扩展输入支持
cat、headers、sqlp、to 和 validate 命令具有扩展输入支持(🗄️)。如果输入是 - 或空值,命令会尝试使用标准输入作为输入源。如果不是,则会检查是否为目录,如果是目录,就会将目录中的所有文件作为输入文件。
如果输入是一个文件,首先会检查其是否具有 .infile-list 扩展名。如果有,则会加载该文本文件,并将每一行解析为一个输入文件路径。这是一种更快速便捷的方式,无需将大量输入文件逐一作为命令行参数传递即可处理它们。此外,这些文件路径可以位于文件系统的任何位置,甚至跨不同存储卷。如果输入文件路径不是绝对路径,则会被视为相对于当前工作目录的相对路径。空行和以 # 开头的行会被忽略。无效的文件路径会被记录为警告并跳过。
对于目录和 .infile-list 输入,带有 .sz 或 .zip 扩展名的 Snappy 压缩文件会自动解压缩。
最后,如果输入只是一个普通的文件,则会被视为常规输入文件。
有限的扩展输入支持
describegpt、lens、slice 和 tojsonl 命令具有有限的扩展输入支持(🗃️)。它们的不同之处在于只处理一个文件。如果提供了 .infile-list 文件或压缩的 .sz 或 .zip 文件,它们只会处理第一个文件。
自动压缩/解压缩
qsv 支持使用 Snappy 帧格式进行_自动压缩/解压缩_。选择 Snappy 而不是更流行的 gzip 等压缩格式,是因为它专为[高性能流式压缩与解压缩]设计(压缩速度可达 2.58 GB/秒,解压缩速度可达 0.89 GB/秒)。
除 index、extdedup 和 extsort 命令外,对于所有其他命令,如果输入文件带有 .sz 扩展名,qsv 在读取时会_自动_进行流式解压缩。此外,如果输入文件具有扩展的 CSV/TSV .sz 扩展名(例如 nyc311.csv.sz、nyc311.tsv.sz 或 nyc311.tab.sz),qsv 还会根据文件扩展名确定使用的分隔符。
同样地,如果 --output 文件带有 .sz 扩展名,qsv 在写入时会_自动_进行流式压缩。若输出文件具有扩展的 CSV/TSV .sz 扩展名,qsv 也会依据文件扩展名来决定分隔符。
需要注意的是,压缩后的文件无法建立索引,因此依赖索引加速的命令(如 frequency、schema、split、stats、tojsonl)将不会启用多线程。在没有索引的情况下,随机访问功能也被禁用,因此 slice 命令不会立即执行,且 luau 的随机访问模式也将不可用。
此外,qsv 还提供了一个专门的 snappy 命令,包含四个子命令,用于直接操作 Snappy 文件:一个多线程的 compress 子命令(比内置的单线程自动压缩快 4–5 倍);一个带有详细压缩元数据的 decompress 子命令;一个用于快速检查文件是否具有 Snappy 头部的 check 子命令;以及一个用于确认 Snappy 文件是否有效的 validate 子命令。
snappy 命令可用于压缩/解压缩任何文件,而不仅限于 CSV/TSV 文件。
借助 snappy compress 子命令,我们可以将纽约市 311 数据(15 GB,2800 万行)在 5.77 秒 内压缩至 4.95 GB,压缩速率为 2.58 GB/秒,压缩比为 0.33(3.01:1)。使用 snappy decompress 子命令,我们可以在 16.71 秒 内完成同一文件的往返解压缩,解压缩速率为 0.89 GB/秒。
相比之下,zip 3.0 在同一台机器上将相同文件压缩至 2.9 GB 需要 248.3 秒,速度慢了 43 倍,仅为 0.06 GB/秒,压缩比为 0.19(5.17:1),但仅节省了额外的 14%(2.45 GB)空间。此外,zip 完成同一文件的往返解压缩也耗时更长,需要 72 秒,解压缩速度仅为 0.20 GB/秒。
[!NOTE] qsv 除了 Snappy 之外还支持其他压缩方式:
sqlp命令可以:
- 自动解压缩 gzip、zstd 和 zlib 压缩的输入文件
- 使用 Arrow、Avro 和 Parquet 格式时自动压缩输出文件(通过
--format和--compression选项)当启用
polars功能时,qsv 可以自动解压缩以下压缩格式的文件:
- CSV:
.csv.gz、.csv.zst、.csv.zlib- TSV/TAB:
.tsv.gz、.tsv.zst、.tsv.zlib;.tab.gz、.tab.zst、.tab.zlib- SSV:
.ssv.gz、.ssv.zst、.ssv.zlib同时支持扩展和有限扩展输入的命令也支持
.zip压缩格式。
RFC 4180 CSV 标准
qsv 遵循 RFC 4180 CSV 标准。然而,在实际应用中,CSV 格式差异很大,qsv 并不完全严格遵守该规范,因此能够处理“真实世界”的 CSV 文件。 qsv 利用强大的 Rust CSV crate 来读取和写入 CSV 文件。
点击这里了解更多关于 qsv 如何利用该 crate 符合标准的信息。
在处理“非典型”CSV 文件时,可以使用 input 和 fmt 命令将其规范化为符合 RFC 4180 标准的格式。
UTF-8 编码
qsv 要求输入文件必须采用 UTF-8 编码(ASCII 是 UTF-8 的子集)。
如果需要重新编码 CSV/TSV 文件,可以使用 input 命令以“有损保存”的方式转换为 UTF-8 编码——将无效的 UTF-8 序列替换为 ``(U+FFFD 替换字符)。
或者,如果您希望真正转码为 UTF-8,可以使用诸如 iconv 等工具,在 Linux/macOS 和 Windows 上完成此操作。
Windows PowerShell 和 Excel 使用注意事项
与其他现代操作系统不同,Microsoft Windows 的默认编码是 UTF16-LE。这会导致在 PowerShell 中将 qsv 输出重定向到 CSV 文件并尝试用 Excel 打开时出现问题——所有内容都会显示在第一列,因为 Excel 无法正确识别 UTF16-LE 编码的 CSV 文件。
# 以下命令将在 Windows 上生成 UTF16-LE 编码的 CSV 文件
qsv stats wcp.csv > wcpstats.csv
这显得有些奇怪,因为人们可能会认为 Microsoft 自己的 Excel 应该能够正确识别 UTF16-LE 编码的 CSV 文件(参见此处)。无论如何,要在 Windows 上创建正确的 UTF-8 编码文件,请改用 --output 选项:
# 因此,在 Windows 上不要将 stdout 重定向到文件
qsv stats wcp.csv > wcpstats.csv
# 而是这样做,以确保文件正确编码为 UTF-8
qsv stats wcp.csv --output wcpstats.csv
另外,qsv 还可以在 CSV 文件开头添加 字节顺序标记(BOM),以标明文件为 UTF-8 编码。您可以通过将 QSV_OUTPUT_BOM 环境变量设置为 1 来实现这一点。
这样,Windows 上的 Excel 就能正确识别该 CSV 文件为 UTF-8 编码。
请注意,这在 macOS 上的 Excel 中并不会出现问题,因为 macOS(与其他大多数 *nix 系统一样)默认使用 UTF-8 编码。同样,在其他操作系统上生成的 qsv 输出文件也不会遇到这个问题,因为 Windows 上的 Excel 可以正确识别 UTF-8 编码的 CSV 文件。
解释器
对于复杂的数据处理任务,您可以使用 Luau 和 Python 脚本。
在处理复杂数据时,推荐使用 Luau 而不是 Python,因为它速度更快、内存效率更高,没有外部依赖,并且提供了类似于 qsv 的 DSL 的多种数据处理辅助函数。
更多信息请参阅 Luau 与 Python。
qsv 附带的另一个“解释器”是 MiniJinja,它用于 template 和 fetchpost 命令中。
内存管理
qsv 支持三种内存分配器——jemalloc(默认)、mimalloc 和标准分配器。
更多信息请参阅 内存分配器。
此外,qsv 还具备内存溢出防护功能,提供两种模式:NORMAL(默认)和 CONSERVATIVE。
更多信息请参阅 内存溢出防护。
环境变量与 .env 文件支持
qsv 支持大量的环境变量,并且可以通过 .env 文件来设置这些变量。
有关详细信息,请参阅 环境变量 以及 dotenv.template 文件。
功能标志
qsv 具有多个 功能标志,可用于启用或禁用可选功能。
更多信息请参阅 功能。
最低支持的 Rust 版本
qsv 的 MSRV 策略要求使用最新的稳定版 Rust,该版本必须被 Homebrew 所支持。目前为 。
尽管 qsv 本身可能会升级其 MSRV,但只有在 Homebrew 支持最新稳定版 Rust 之后,才会发布新的 qsv 版本。
目标 / 非目标
QuickSilver 的目标按优先级排序如下:
尽可能快 - 为此,它频繁发布新版本,采用积极的最低支持 Rust 版本(MSRV)策略,充分利用 CPU 特性,运用多种缓存策略(详见 性能),使用 HTTP/2(https://www.cloudflare.com/learning/performance/http2-vs-http1.1/#:~:text=Multiplexing%3A%20HTTP%2F1.1%20loads%20resources,resource%20blocks%20any%20other%20resource.),并在合适且有意义的情况下实现多线程。此外,它尽可能使用最新的依赖项,并会利用 Cargo 的
patch功能从依赖中获取尚未发布的修复或功能。更多信息请参阅 性能。能够处理超大文件 - 大多数 qsv 命令都是流式处理,占用固定内存,可以处理任意大小的 CSV 文件。对于那些需要将整个 CSV 文件加载到内存中的命令(标记为 🤯),qsv 提供了内存溢出预防机制、批处理策略以及使用磁盘来处理超出内存容量文件的“外部”命令。更多信息请参阅 内存管理。
完整的数据处理工具集 - qsv 致力于成为一个全面的数据处理工具集,既可用于快速分析和调查,也能满足生产级数据管道的需求。其丰富的命令针对常见的数据处理任务设计,可通过基于 Luau 的 DSL 组合成复杂的数据处理脚本。Luau 还将作为一整套 qsv 配方库 的核心——这些配方是针对常见任务(如街道级别的地理编码、去除 PII、数据增强等)的可重用脚本,提供易于修改的参数提示。
可组合/互操作性 - qsv 设计为可组合,特别注重与其他常用 CLI 工具(如
awk、xargs、ripgrep、sed等)以及知名 ETL/ELT 工具(如 Airbyte、Airflow、Pentaho Kettle 等)的互操作性。其命令可以通过管道与其他工具结合使用,并支持 JSON/JSONL、Parquet、Arrow IPC、Avro、Excel、ODS、PostgreSQL、SQLite 等常见文件格式。更多信息请参阅 文件格式。尽可能便携 - qsv 设计为便携,在多个平台上提供安装程序,并内置自动更新机制。优先支持 Linux、macOS 和 Windows。更多信息请参阅 安装选项。
尽可能易用 - qsv 设计为易用,至少在命令行界面中算是非常容易上手:shrug:。其命令拥有众多选项,但都配有合理的默认值。使用说明面向数据分析师而非开发者编写;文档中包含大量示例,测试本身也兼具示例作用。借助 qsv pro,用户可以通过图形用户界面获得更强大的功能,同时保持易用性。
尽可能安全 - qsv 设计为安全。它没有外部运行时依赖,使用 Rust 编写,并通过自动化 DevSkim、"cargo audit" 和 Codacy GitHub Actions 工作流自动审计代码库中的安全漏洞。
它始终使用最新的稳定版 Rust,并坚持积极的 MSRV 策略及所有依赖项的最新版本。qsv 拥有超过 2,600 个测试用例的庞大测试套件,其中包括多项属性测试,这些测试会为常用命令随机生成参数(参考 BurntSushi/quickcheck)。预编译的二进制归档文件经过 zipsigned 签名,因此您可以验证其完整性(详见 验证预编译二进制归档的完整性)。其自动更新机制会在应用更新前自动验证预编译二进制归档的完整性。更多详细信息请参阅 安全性。
- 尽可能易于贡献 - qsv 设计为易于贡献,重点在于可维护性。其模块化架构允许通过特性标志轻松添加自包含的命令,源代码注释详尽,使用说明内嵌其中,并提供辅助函数以方便创建新命令和支持测试。更多信息请参阅 特性 和 贡献指南。
QuickSilver 的非目标是:
- 尽可能小 - qsv 被设计得较小,但不会以牺牲性能、功能、可组合性、便携性、易用性、安全性或可维护性为代价。不过,我们确实提供了
qsvlite变体,其体积约为qsv的 16%,以及qsvdp变体,体积约为qsv的 16%。然而,这些变体的功能有所减少。
此外,部分命令通过特性标志控制,因此您可以仅编译所需功能的 qsv。
- 多语言支持 - qsv 的 使用说明 和 消息 仅提供英文版本,目前暂无计划支持其他语言。但这并不意味着它只能处理英文输入文件。只要文件采用 UTF-8 编码,qsv 就能处理任何语言的良好格式的 CSV 文件。此外,它还支持除逗号之外的其他分隔符;
apply whatlang操作可检测 69 种语言;而apply thousands, currency and eudex操作则支持不同语言和国家的数字、货币和日期解析与格式化规范。
最后,虽然 geocode 命令的默认 Geonames 索引仅为英文,但可通过 geocode index-update 子命令并使用 --languages 选项重建索引,从而返回多语言的地名(支持多达 254 种语言,参考 http://download.geonames.org/export/dump/alternatenames/)。
测试
qsv 在 tests 目录下拥有约 2,700 个测试用例。每个命令都有独立的测试文件,命名规则为 test_<COMMAND>.rs。除了防止回归问题外,这些测试也是很好的示例,经常被各命令的使用说明引用。
要测试每个二进制变体:
# 测试 qsv
cargo test --features all_features
# 测试 qsvlite
cargo test --features lite
# 使用 qsvlite 测试所有名称中含有 "stats" 的测试
cargo test stats --features lite
测试 qsvmcp
cargo test --features qsvmcp
测试 qsvdp
cargo test --features datapusher_plus
测试特定命令
这里我们只测试 stats 命令,并使用 t 作为 test 的别名,-F 作为 --features 的快捷方式
cargo t stats -F all_features
使用特定功能测试特定命令
这里我们只测试 luau 命令,并启用 luau 功能
cargo t luau -F feature_capable,luau
使用多个功能测试 count 命令
我们使用 "test_count",因为我们不想运行其他测试名称中包含 "count" 的测试,例如 test_geocode_countryinfo
cargo t test_count -F feature_capable,luau,polars
使用替代分配器进行测试
除了默认的 jemalloc 分配器之外
cargo t --no-default-features -F all_features,mimalloc
## 许可证
采用 MIT 或 [UNLICENSE](https://unlicense.org) 双重许可。
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fjqnatividad%2Fqsv?ref=badge_large)
## 起源
qsv 是对流行的 [xsv](https://github.com/BurntSushi/xsv) 工具的一个分支。基于这一坚实的基础,它于 2021 年 9 月被分叉,此后逐渐发展成为一个通用的数据处理工具集,增加了许多命令和功能。
更多详情请参阅 [FAQ](https://github.com/dathere/qsv/discussions/287)。
## 赞助商
<div align="center">
|qsv 的实现得益于|
:-------------------------:|
|[](https://datHere.com)<br>|
|基于标准、业界最佳的开源解决方案<br>让您的**数据有用、易用且被广泛使用。** |
</div>
## 名称冲突
该项目与 [英特尔的 Quick Sync Video](https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html) 无关。
版本历史
19.0.02026/04/0618.0.02026/03/2017.0.02026/03/0316.1.02026/02/1516.0.02026/02/0915.0.12026/01/2815.0.02026/01/2614.0.02026/01/1313.0.02026/01/0612.0.02025/12/2411.0.22025/12/0810.0.02025/11/239.1.02025/11/038.1.12025/10/228.1.02025/10/208.0.02025/10/067.1.02025/09/067.0.12025/08/297.0.02025/08/286.0.12025/07/12常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器





















