ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

VisiData 数据修改实战指南:添加、编辑与删除行,以及 Deferred Sheet 的延迟提交机制

VisiData 数据修改实战指南:添加、编辑与删除行,以及 Deferred Sheet 的延迟提交机制 数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载VisiData 是一个终端电子表格多用途工具terminal spreadsheet multitool除了通过剪贴板复制粘贴数据外它还内置了一整套从零创建、编辑和删除行的命令体系。本篇指南以仓库中的 ModifyGuide 为骨架结合 modify.py 等核心源码系统讲解增删改行的快捷键、单元格编辑模式、[M]修改状态标识以及 SQLiteSheet、Dir Sheet 等延迟保存deferred saving表格的颜色标记与commit-sheet提交机制。读完本文你将能在 VisiData 中熟练地批量增删行、用外部编辑器批量编辑单元格并安全地把修改写回数据源。一、修改操作命令全景在 VisiData 中除了剪切/粘贴见Clipboard Guide对应源码 clipboard.py之外行的创建、编辑与删除由以下几组命令支撑命令 longname默认按键作用定义位置add-rowa在光标行后追加一个空行modify.pyadd-rowsga批量追加 N 个空行交互输入数量modify.pyedit-celle编辑当前单元格内容sheets.pysysedit-cellCtrlO在外部$EDITOR中编辑当前单元格features/sysedit.pysysedit-selectedgCtrlO在外部$EDITOR中批量编辑可见列、已选行features/sysedit.pydelete-rowd删除当前行clipboard.pydelete-selectedgd删除所有已选行clipboard.pycommit-sheetzCtrlS将延迟修改提交回数据源modify.py这些命令同样可以通过菜单触发例如Edit Delete current row delete-row、Row Add one row、File Save changes to source commit-sheet菜单定义见 modify.py 与 clipboard.py。二、添加新行a与ga按a执行add-row其命令表达式为addRows([newRow()], indexcursorRowIndex); cursorDown(1)即通过Sheet.newRow()生成一个空白行对象插入到当前光标行之后并把光标下移一行方便连续录入。按ga执行add-rows则会先弹出一个输入框询问要添加的行数默认值 1nint(input(add # rows: , value1)); addRows(new_rows(n), indexcursorRowIndex); cursorDown(1)从源码 modify.py 可以看到new_rows(n)本质上是[sheet.newRow() for i in range(n)]即批量构造空白行。真正的插入逻辑在 addRows 中逐个调用sheet.addRow(row, index...)把行插入到指定位置之后若该表格启用了延迟保存sheet.defer为真则同时调用sheet.rowAdded(row)把新行登记到_deferredAdds待提交集合最后调用sheet.setModified()标记表格已被修改并通过vd.addUndo(_removeRows)注册撤销操作。值得注意addRow在 sheets.py 与 sheets.py 有基础实现而各加载器loader可覆盖它——例如 loaders/json.py、loaders/xlsx.py、loaders/xml.py 都有各自的addRow实现说明加行在底层会与具体文件格式的写入逻辑联动。三、编辑单元格输入模式与快捷键按e进入当前单元格的编辑模式底层调用 editCell。编辑期间输入框有自己的按键绑定见 editCell 中的bindings字典Tab完成编辑并跳到下一个单元格在最后一列时折行跳到下一行行首ShiftTab完成编辑并跳到上一个单元格在第一列时折行跳到上一行行末Shift方向键完成编辑并沿该方向移动光标同时保留列名编辑语境rename-col。如果你对输入框的按键还不熟悉在编辑单元格时按CtrlG可以循环切换侧边栏sidebar的指南直接查看Input Keystroke Help输入键位帮助这是边编辑边查阅键位表的最快方式。用外部编辑器编辑单元格CtrlO在编辑单元格时按CtrlO会执行sysedit-cell把当前单元格的完整显示值写入临时文件调用外部$EDITOR打开vd.launchExternalEditor见 features/sysedit.py。若编辑器保存后的内容与原来不同则把新值写回该单元格。外部编辑器非常适合输入多行文本、JSON 片段等复杂内容。批量场景更常用的是gCtrlOsysedit-selected其实现syseditCells(visibleCols, onlySelectedRows)的工作流程见 features/sysedit.py将当前表格的可见列与已选行复制为一个临时子表询问文件类型默认取save_filetype通常是tsv把子表保存到临时文件用外部编辑器打开该临时文件等编辑器退出后重新加载逐列比较编辑前后的显示值只把真正被编辑器改动的单元格通过col.setValuesTyped写回原表。也就是说gCtrlO让你像编辑普通文本文件一样一次批量修改几百行数据改动自动回填。相关行为在 tests/test_editor.py 中有对应的回归测试。另外列若被标记为只读readonly编辑时会直接报错cannot edit readonly column见 editCell只读列使用主题色color_readonly渲染见 modify.py。四、删除行d与gd按d执行delete-rowdelete_row(cursorRowIndex)按gd执行delete-selecteddeleteSelected()。非延迟表格的delete_row逻辑见 clipboard.py很直观把行从sheet.rows弹出、注册撤销vd.addUndo(sheet.rows.insert, ...)、若是已选行则取消选中最后调用sheet.commitDeleteRow(oldrow)立即写回数据源并setModified()。批量删除走 deleteSelected它基于Sheet.deleteBy(self.isSelected)完成。deleteBy见 modify.py是删除的核心若表格启用了延迟保存且未要求强制提交defer and not commit则不真正删除行而是对每个匹配行调用sheet.rowDeleted(r)登记到_deferredDels行仍留在屏幕上等待后续统一提交否则直接从sheet.rows中移除并调用sheet.commitDeleteRow(r)写回数据源删除后会把光标定位到下一个未被删除的行并通过vd.status(deleted N rows)给出反馈。五、修改状态标识[M]只要表格发生过添加、删除或编辑VisiData 就会把该表格标记为已修改hasBeenModified True通过setModified()设置加载完成时会被重置为 False见 modify.py并在界面右下角的状态栏显示[M]标识。这是你判断当前表格是否有未落盘修改的最直观信号也是quitguard选项和退出确认逻辑的依据。六、延迟保存Deferred Sheets先标记、后提交什么是延迟保存部分表格类型支持deferred延迟保存修改不会立即写回磁盘/数据源而是先在内存中登记为待提交状态由你显式提交。典型例子包括SQLiteSheet与Dir Sheet从源码看它们都在类级别声明了defer Trueloaders/sqlite.pySQLiteSheetshell.pyDirSheet其他启用defer True的还有 loaders/orgmode.py、vgit 系列表格如 apps/vgit/log.py等。三类待提交变更与颜色标记延迟保存期间修改会分三类登记并配有各自的主题色colorizer 定义见 modify.py变更类型数据结构默认颜色主题选项新增行added rows_deferredAddsrowid - row绿色greencolor_add_pending修改单元格modified cells_deferredModsrowid - (row, {col: val})反显黄reverse yellowcolor_change_pending删除行deleted rows_deferredDelsrowid - row红色redcolor_delete_pending登记动作分别由 rowAdded、cellChanged、rowDeleted 完成。其中cellChanged有个细节如果被编辑的单元格所在行本身是待新增行则直接写入行对象而不再单独登记修改。这三个登记动作都会注册相应的撤销回调因此在提交之前undou可以逐条回退而一旦提交commit之后撤销将不再可用源码会给出cannot undo row addition after a commit之类的警告。颜色选项在 modify.py 中定义并可在主题theme中定制例如 themes/adwaita.py 的明亮配色、themes/light.py、themes/ascii8.py 与 themes/asciimono.py。这样未提交的绿色新行、反显黄的改动单元格、红色的待删行一目了然。提交变更zCtrlScommit-sheet延迟表格只有在执行commit-sheet默认键zCtrlSlongname 为commit-sheet后修改才会真正写回数据源。提交前 VisiData 会汇总三类待提交变更并弹窗确认例如add 2 rows and change 5 values and delete 1 row?。汇总逻辑来自 getDeferredChanges 与 changestr。整个提交链路为commit()modify.py检查sheet.defer若该表格类型不支持延迟保存则直接fail(commit-sheet is not enabled for this sheet type)通过vd.confirmOverwrite(...)做存在性/覆盖确认与overwrite选项联动见 modify.pyputChanges()modify.py依次执行commitAdds()、commitMods()、commitDeletes()分别把待新增行写入数据源、把改动值写回各列、删除待删行提交完成后hasBeenModified复位[M]标识消失。注意commit-sheet的命令描述是not undoable!——提交不可撤销因此确认弹窗是对数据的最后一道保护。commitAdds/commitMods/commitDeletes各自的实现见 modify.py各加载器还可覆盖commitAddRow/commitDeleteRow来适配具体文件格式。七、相关选项Options速览原指南中与本主题直接相关的选项如下选项默认值说明定义位置quitguardFalse退出或关闭含未保存修改的表格前要求确认interface.pycolor_add_pendinggreen待新增行的颜色modify.pycolor_change_pendingreverse yellow待修改单元格的颜色modify.pycolor_delete_pendingred待删除行的颜色modify.pyoverwritec是否允许覆盖已存在文件c确认后覆盖n/readonly禁止modify.pyquitguard为修改数据加一道确认闸门quitguard在 sheets.py 的退出与关表流程中生效退出整个 VisiData 时vd.quit若quitguard为真且存在已修改precious且hasBeenModified的表格会弹窗确认exit VisiData (N sheet(s) modified)?关闭单个表格时confirmQuit对已修改或显式设置了quitguard的表格分别给出quit modified sheet ...?/quit guarded sheet ...?的确认。此外还有两个配套命令sheets.pyguard-sheet在当前表格上单独开启 quitguard与guard-sheet-off关闭。quitguard也支持--quitguard命令行开关见 main.py。结合延迟保存的[M]状态标识quitguard能有效防止带着未提交修改误退会话。八、源码与测试索引想深入了解本文涉及的实现细节可按以下路径继续阅读修改/延迟提交核心 visidata/modify.py单元格输入与编辑键位 visidata/_input.py删除行实现 visidata/clipboard.py、visidata/selection.py外部编辑器批量编辑 visidata/features/sysedit.py退出确认与 quitguard visidata/sheets.py延迟表格示例 visidata/loaders/sqlite.py、visidata/shell.py主题配色示例 visidata/themes/adwaita.py、visidata/themes/ascii8.py相关测试 visidata/tests/test_commands.py覆盖edit-cell、add-rows等命令、visidata/tests/test_editor.py外部编辑器流程掌握普通表格立即写入 延迟表格先标记后提交这两套机制是安全使用 VisiData 修改数据的关键普通表格如 CSV的d/e/a操作即时生效且有撤销兜底而面对 SQLite 或目录这类延迟表格时请善用三种color_*_pending颜色实时审视待提交改动确认无误后再按zCtrlS落盘。赞分享数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载相关推荐VisiData 数据修改 API 全解析行增删、单元格编辑、延迟提交与撤销机制VisiData 数据修改 API 全解析行增删、单元格编辑、延迟提交与撤销机制 导读 本文围绕 VisiData 官方 API 文档 docs/api/mo数据分析CLI数据可视化VisiData CRUD 实战指南创建 Sheet、行与列的增删改查操作详解VisiData CRUD 实战指南创建 Sheet、行与列的增删改查操作详解 导读 本文基于 VisiData 官方文档中的 CRUD 章节 docs/c数据分析CLI数据可视化PHP-FFMpeg媒体元数据操作终极指南添加、修改与删除标签信息PHP FFMpeg媒体元数据操作终极指南添加、修改与删除标签信息 在当今数字媒体时代 PHP FFMpeg媒体元数据操作 已成为处理音视频文件不可或缺的技音视频视频处理音频处理上一篇Zed扩展系统全攻略自定义编辑器的艺术下一篇如何用Cam2BEV处理遮挡问题occlusion算法深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表