- 数据分析
- CLI
- 数据可视化
【免费下载链接】visidata
A terminal spreadsheet multitool for discovering and arranging data
本指南基于 VisiData 官方工作坊提纲(dev/workshop-outline.md)整理而成,系统覆盖了从安装、基础操作、Vim 风格移动与搜索、行选择、列与类型、聚合统计、正则与派生列、Python 表达式,到命令日志(Cmdlog)录制回放与宏的完整知识链路。读完本指南,你将掌握 VisiData 的核心按键体系与工作流,能够像操作电子表格一样在终端中即时浏览、筛选、变换和导出任意结构的数据文件。
VisiData 是什么:终端里的“电子表格多工具”
VisiData 是一款运行在终端中的交互式“电子表格”工具,用于发现与整理数据(terminal spreadsheet multitool for discovering and arranging data)。工作坊提纲开头用四句话概括了它的定位与背景:
- 它是一个终端“电子表格”(terminal "spreadsheet"),所有界面绘制在字符终端内,不依赖 GUI;
- 它只需要Python 3,且零强制依赖(python3, *no dependencies),核心即可开箱即用;
- VisiData 1.0 诞生于 **2017 年的 sabbatical(休假年)**期间;
- 采用GPL3 许可证发布,官方在提纲中明确呼吁社区贡献,尤其是加载器(loaders)与工作流(workflows)——这正是它“让数据再次变得有趣”(makes data fun again)的开放生态基础。
从仓库结构看,这一“生态”并非虚言:visidata/loaders/目录下包含 64 个加载器模块,覆盖 csv/tsv、json/jsonl、xlsx/ods、sqlite、hdf5、parquet、numpy、stata、sas、xml、yaml、toml、msgpack、固定宽度文件乃至 PNG、shapefile、pcap 等格式(参见 visidata/loaders);visidata/features/下另有 58 个特性模块(如正则派生列、频率表、描述统计、展开列等),为工作坊提纲中的绝大多数快捷键提供了底层实现。
第 0 步:安装与依赖
工作坊的安装流程非常简单:
- 安装 Python 3:macOS 上安装 Python3 官方
.dmg即可,其中已自带pip3; - 安装 VisiData 本体:执行
pip3 install visidata,或从 git 仓库克隆后本地运行; - 按需补充加载器依赖:某些文件格式需要额外的第三方库,例如 Excel 需要
pip3 install openpyxl。VisiData 会在加载对应格式时提示缺少的依赖。
仓库内还提供了其他安装途径可供参考:setup.py定义了标准的 pip 打包配置,dev/visidata-brew.rb提供了 Homebrew 打包配方,platform/windows/vdwin-installer.md说明了 Windows 安装方式,requirements.txt列出了核心运行依赖,requirements.scm则面向源码管理(SCM)安装场景。
安装完成后,在终端输入vd并跟上一个文件路径即可打开数据文件,例如vd sample_data/benchmark.csv(仓库 sample_data 目录下有大量可用于练习的示例数据)。
第 1 步:基础操作与退出
工作坊先教会两件最简单的事:
q:退出当前 sheet(表格视图)。反复按q会逐层退出并最终退出 VisiData;^C(Ctrl+C):中断当前操作。当某个命令(如正则搜索或大数据集重载)执行时间过长时,用^C安全打断。
这两个键是“钓鱼”式体验(工作坊原话为 Basics/Fishing)——先让你能进能退,才有安全感去探索。
第 2 步:立即可获得回报的操作
工作坊称之为 “Immediately Rewarding”(立刻有成就感)的一组按键:
| 按键 | 功能 | 源码依据 |
|---|---|---|
F/Enter | F打开频率表(Frequency Table),按当前列分组并聚合其他列;Enter打开当前行(dive,下钻) | F见 visidata/freqtbl.py;Enter见 visidata/pyobj.py |
e | 编辑当前单元格 | visidata/sheets.py |
- | 隐藏当前列 | visidata/features/layout.py |
_ | 切换当前列宽度为“最大宽度 / 默认宽度” | visidata/features/layout.py |
[/] | 按当前列升序 / 降序排序(并替换已有排序条件) | visidata/sort.py |
^S | 保存当前 sheet(会提示输出文件名,按扩展名推断格式) | visidata/save.py |
这些按键共同构成了“打开文件 → 排序 → 编辑 → 保存”的最小闭环,让第一次使用者几分钟内就能完成一次真实的数据处理。
第 3 步:Vim 风格的移动与搜索
VisiData 的移动与搜索完全采用 Vim 习惯:
hjkl:左 / 下 / 上 / 右移动光标(见 visidata/movement.py);/与?:在当前列中向后 / 向前正则搜索;n/N跳到下一个 / 上一个匹配(见 visidata/features/hlsearch.py 与 visidata/search.py);g前缀:把移动和搜索放大到全局。例如gj/gk跳到底部 / 顶部,gh/gl跳到最左 / 最右列(见 visidata/movement.py),g/与g?则在所有可见列中向前 / 向后搜索(见 visidata/features/hlsearch.py);^H(Ctrl+H):打开手册(manpage)(F1仍然可用,见 visidata/help.py 与 visidata/menu.py);z^H:打开上下文相关的命令列表(help-commands,等价绑定zBksp,见 visidata/help.py)——只显示当前 sheet 可用的命令;^E:查看最近一次错误的完整 traceback(见 visidata/textsheet.py)。
工作坊在此处留下了一句关键点评(原文标注为 saul 的提示):“即便你只学会了以上这些,你也已经拥有一把好用的工具在手。”换句话说,移动 + 搜索 + 退出,就足以覆盖日常浏览的大部分场景。
第 4 步:行选择(Selection)
选择是 VisiData 数据整理的起点,按键集中在 visidata/selection.py:
| 按键 | 功能 |
|---|---|
s/t/u | 选择 / 切换选择 / 取消选择当前行,并自动下移一行(L211-L213) |
gs/gt/gu | 选择 / 切换 / 取消选择所有行(L215-L217) |
\|/\ | 按正则选择 / 取消选择当前列中匹配的行(L229-L230) |
" | 打开重复 sheet(duplicate sheet),只包含已选行(visidata/sheets.py) |
, | scoop:选择当前列中与当前单元格显示值相等的所有行(L234) |
{/} | 跳到上一个 / 下一个已选行(visidata/movement.py) |
gd | 删除所有已选行(visidata/clipboard.py) |
ge | 将已选行的当前列统一设置为同一个输入值(setcol-input,visidata/sheets.py) |
g* | 对已选行的当前列做正则替换(见下一节) |
其中,(scoop)是工作坊特别标注的选择技巧:光标停在一个值上,按,即可把所有“长得一样”的行全部抓出来,随后"生成子表或gd删除,非常适合快速清洗重复数据。
工作坊在这里给出了第二句里程碑点评(anja 的提示):“如果你现在离开,你手里也已经有一把好用的工具了。”言下之意:仅凭“浏览 + 选择 + 生成子表”的组合,VisiData 已经能完成很多实际工作。
第 5 步:列基础(Column Basics)
这一节围绕列的属性与类型展开,源码见 visidata/sheets.py:
!:把当前列切换为键列(key column)——键列决定行的唯一标识,也是 dive、join、频率表分组等操作的默认依据(key-col命令,L1292);~/#/$/%/@:分别把当前列类型设为字符串(str)/ 整数(int)/ 货币(currency)/ 浮点数(float)/ 日期(date)。工作坊特意提醒:这些列命令和^一样,全部位于数字键上(shift+数字)。其中$与@的具体实现见 visidata/type_currency.py 与 visidata/type_date.py;gF:按所有键列打开频率表(freq-keys,visidata/freqtbl.py)——当你用!定义了多个键列后,gF可按组合键分组;C:打开Columns Sheet(列属性表),以表格形式查看并编辑所有列的属性,如类型、宽度、格式串、名称等(visidata/metasheets.py)。
第 6 步:聚合器(Aggregators)
I:打开Describe Sheet(描述统计表),一次性给出当前 sheet 所有可见列的最小值、最大值、均值、标准差等统计量(describe-sheet,见 visidata/features/describe.py;gI可对所有 stack 中的 sheet 做描述统计,IndexSheet上还有按已选 sheet 描述的变体);+:给当前列添加聚合列(aggregate-col)。按+后输入聚合器名(如sum mean median min max std等),VisiData 会新建一列,以列名_聚合器名命名并填充聚合结果;g+可一次性为多个列添加聚合(见 visidata/aggregators.py)。
聚合器的扩展能力也在 visidata/guides/AggregatorsSheet.md 中有说明:例如要新增一个计算“极差(max − min)”的聚合器,只需在.visidatarc中添加相应定义即可,体现了 VisiData 的“可编程电子表格”设计。
第 7 步:正则与派生列
这是 VisiData 的招牌能力之一,实现在 visidata/features/regex.py:
| 按键 | 功能 | 说明 |
|---|---|---|
: | 按正则拆分列(addcol-split) | 提示输入 split regex,将当前列按匹配位置拆成多列 |
; | 按正则捕获列(addcol-capture) | 提示输入 capture regex,用捕获组生成新列 |
* | 正则替换生成新列(addcol-regex-subst) | 将当前列中匹配search的部分替换为replace,支持\1反向引用 |
g* | 对已选行直接做正则替换(setcol-regex-subst) | 就地修改数据而非新建列 |
而在 visidata/expr.py 中:
=:创建派生列(addcol-expr)。提示输入 Python 表达式,表达式内直接以列名作为变量使用,例如=col1 + col2、=len(name)。VisiData 会基于当前列上下文求值,生成一个新列。由于表达式是 Python,函数、字符串方法、数学运算等全部可用——这使 VisiData 兼具“电子表格”与“Python REPL”的双重身份。
第 8 步:Python 集成
工作坊第 8 节把 Python 能力划分为两块:
1. 表达式搜索 / 选择(z前缀 + 符号键)
z/与z?:按 Python 表达式在当前列向前 / 向后搜索(visidata/search.py)。例如在数值列中搜x > 1000,在文本列中搜x.startswith('foo');z|与z\:按 Python 表达式选择 / 取消选择所有可见列中匹配的行(visidata/selection.py)。
表达式同样以列名为变量,可在任意列上引用,例如select by expr:提示下输入price*qty > 10000。
2..visidatarc配置文件
工作坊明确列出.visidatarc的三类用途:
- options(选项):集中设置全局选项,优先级上
.visidatarc的覆盖先于命令行选项(见 visidata/settings.py); - functions(函数):在
.visidatarc中定义的函数,可在派生列(=)等 Python 表达式中直接调用(visidata/man/vd.inc 明确说明 Functions defined in .visidatarc are available in python expressions); - commands / bindkeys(命令与键位绑定):通过
addCommand与bindkey自定义新命令和快捷键。
VisiData 启动时会在$HOME下查找.visidatarc,若存在则对其内容执行exec()(visidata/man/vd.inc)。仓库内可以找到大量.visidatarc用法实例:例如visidata/experimental/vimcompat.py开头注释说明“在 .visidatarc 中import visidata.experimental.vimcompat启用 Vim 兼容移动”;visidata/loaders/f5log.py展示了用vd.options.set(...)写入配置;visidata/apps/vdsql/test.sh中的测试甚至使用--config tests/.visidatarc传入自定义配置。OptionsSheet中还提供了save_visidatarc命令,可直接把当前所有选项设置导出写入.visidatarc(visidata/metasheets.py)。
第 9 步:Cmdlog(命令日志)——录制与回放
Cmdlog 是 VisiData 实现“可复现数据处理”的机制,核心实现在 visidata/cmdlog.py:
- 保存(save):按
^D(save-cmdlog)把本次会话的所有命令记录保存为.vdj文件(visidata/cmdlog.py)。注意部分命令带有replay=False标记(如编辑类、打开外部编辑器类),不会写入日志; - 回放(replay):命令行用
vd --play <cmdlog.vdj> [--batch] [-w <waitsecs>] [-o <output>]回放日志(参数定义见 visidata/main.py)。--batch模式下无界面、状态输出到 stdout,配合-o可在回放结束后把最终可见 sheet 保存到指定文件,适合自动化;-p/-b/-P/-w分别是--play/--batch/--preplay/--replay_wait的别名(visidata/main.py); - 宏(macros):VisiData 支持把一段操作录制为宏后回放。仓库 tests/macros 目录下既有宏录制测试脚本
test_macro.vd,也有对应的 golden 输出,展示了宏录制 → 回放 → 断言输出的完整测试链路;cmdlog.py中还内置了macro命令与“replay 中再次 replay”的嵌套支持(见 visidata/cmdlog.py 的注释)。
此外还有两个实用回放参数:--replay_ignore_errors让回放在出错时继续而非中止(visidata/cmdlog.py),-w可控制两条重放命令之间的等待秒数,便于观察回放过程。
第 10 步:额外功能(Extras)
工作坊最后一节以“彩蛋”收尾:
Y:把当前行(所有可见列)复制到系统剪贴板(syscopy-row,visidata/clipboard.py,使用options.clipboard_copy_cmd指定的命令实现)——终端里也能“复制粘贴行”;.(dot):对当前数值列绘图(plot-column,visidata/graph.py)。以键列作为 x 轴,当前数值列作为 y 轴生成 ASCII 图形;g.可对所有可见数值列绘图;按q返回表格。仓库还提供了 sample_data/benchmark.csv 等适合绘图的数值型示例数据;- pipe into(管道):VisiData 可作为管道的一环参与 shell 管道,例如
cat data.tsv | vd -或vd file.csv | cut -f2,实现与其他命令行工具的互操作; vd --diff:比较两个数据集的差异。仓库内 visidata/experimental/diff_sheet.py 实现了差异着色:与--diff源不同的值用color_diff(红色)显示,新增的行 / 列用color_diff_add(黄色)显示,并提供了setdiff-sheet命令把当前 sheet 设为后续 sheet 的 diff 基准;- so many things:工作坊以“还有太多太多”收尾——事实上仓库 visidata/features 与 visidata/experimental 下还有展开/收缩列、频率表下钻、join、melt、unfurl、随机采样、条件格式(condfmt)、进度条、外部编辑器、状态历史、命令面板(长命令名执行)等大量能力,均可通过
^H手册与z^H上下文命令列表随时查阅。
结论:从“钓鱼”到“大师”的渐进路径
回顾整条工作坊路线,可以提炼出 VisiData 的学习哲学:先用最少的按键获得正反馈(浏览、排序、保存),再逐步叠加选择、类型、聚合、正则、Python 表达式等“重武器”,最终用 Cmdlog 和宏把整个流程固化、复用和自动化。工作坊两处“你随时可以离开,但工具依然好用”的点评,正说明这种渐进式设计的精妙——每一层能力都是独立完整、即时可用的,而叠加起来则构成一个可编程、可复现、可扩展的终端数据处理环境。
如需继续深入,仓库内还有更系统的学习资源:交互式命令手册可随时按^H打开;docs 目录下的usage.md、columns.md、rows.md、loading.md、formats.md、save-restore.md等文档分别对应格式加载、列操作、行操作、保存回放等专题;dev/checklists 提供了添加命令、添加聚合器等贡献者的开发清单;tests 目录则包含上千个可运行的测试用例(如 tests/test-smoke.sh、tests/test-save.sh),既是回归保障,也是学习各功能精确行为的活教材。
- 数据分析
- CLI
- 数据可视化
【免费下载链接】visidata
A terminal spreadsheet multitool for discovering and arranging data
相关推荐
Cerbero-7b商业应用终极指南:意大利语客服与内容生成实战案例 🚀
Cerbero 7b商业应用终极指南:意大利语客服与内容生成实战案例 🚀 Cerbero 7b 作为首个完全开源免费的意大利语大型语言模型,正在彻底改变意大利
终极x-spreadsheet使用指南:从零开始快速上手JavaScript电子表格
终极x spreadsheet使用指南:从零开始快速上手JavaScript电子表格 想要在网页中嵌入功能强大的电子表格吗?x spreadsheet正是你需要
前端UI组件Mi-Create小米手表表盘制作终极指南:从零基础到设计大师
Mi Create小米手表表盘制作终极指南:从零基础到设计大师 还在为小米手表找不到心仪的表盘而烦恼吗?想要打造专属的个性化表盘却不知从何入手?Mi Creat
桌面应用开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考