抛弃 Excel?基于 VisiData 内核的 Python 本地高性能数据浏览器

33 阅读4分钟

背景:为什么造这个轮子?

做数据分析或者后端开发的同学应该都有过这种痛苦:

  1. Excel 真的很慢:打开一个 500MB 的 CSV,Excel 要转圈半天,要是超过 100 万行,直接报错或卡死。
  2. Pandas 查看不便df.head() 只能看前几行,想滚动浏览、筛选、排序,还得写代码。
  3. 现有工具不顺手:Tad 不更新了,D-Tale 功能太重且依赖全量加载。

我非常喜欢 VisiData (一个终端下的数据浏览神器),它的核心引擎极快。但我还是习惯用鼠标交互,想要一个现代化的 Web 界面。

于是我利用周末写了 VisiLens —— 一个本地优先 (Local-First) 的高性能数据浏览器。

GitHub 仓库 (求 Star 🌟): github.com/PStarH/Visi…

核心特性

  • 极速加载: 基于 VisiData 强大的内核,支持百万级数据秒开。
  • 数据安全: 纯本地运行 (localhost),数据文件绝对不会上传到任何云端,公司敏感数据也能放心看。
  • 格式通吃: 支持 CSV, Parquet, Excel (.xlsx), JSON, JSONL, SQLite 等多种格式。
  • 交互友好: 支持列排序、正则筛选、列类型转换 (Int/Float/Date),右键菜单操作。

技术实现:为什么能这么快?

很多 Web 版 CSV 查看器卡顿,是因为把所有数据都发给了前端。VisiLens 做了两个层面的优化:

1. 后端 (FastAPI + VisiData)

我没有重新造轮子,而是复用了 VisiData 的 Core。VisiData 在处理大文件时使用了流式处理和内存映射,非常高效。 FastAPI 仅作为一个“桥梁”,前端请求哪一页的数据,后端就只切片返回哪一页的数据 (Pagination),内存占用极低。

2. 前端 (React + Virtualization)

前端使用了 虚拟滚动 (Virtual Scrolling) 技术。 哪怕有 100 万行数据,浏览器 DOM 树中永远只渲染你屏幕上看到的那几十行 <div>。当你滚动时,动态替换内容。这保证了无论数据量多大,滚动都丝般顺滑,不会炸内存。


快速上手

VisiLens 是一个 Python 包,直接用 pip 安装即可:

# 需要 Python 3.10+
pip install visilens

背景:为什么造这个轮子?

做数据分析或者后端开发的同学应该都有过这种痛苦:

  1. Excel 真的很慢:打开一个 500MB 的 CSV,Excel 要转圈半天,要是超过 100 万行,直接报错或卡死。
  2. Pandas 查看不便df.head() 只能看前几行,想滚动浏览、筛选、排序,还得写代码。
  3. 现有工具不顺手:Tad 不更新了,D-Tale 功能太重且依赖全量加载。

我非常喜欢 VisiData (一个终端下的数据浏览神器),它的核心引擎极快。但我还是习惯用鼠标交互,想要一个现代化的 Web 界面。

于是我利用周末写了 VisiLens —— 一个本地优先 (Local-First) 的高性能数据浏览器。

GitHub 仓库 (求 Star 🌟): github.com/PStarH/Visi…

核心特性

  • ⚡️ 极速加载: 基于 VisiData 强大的内核,支持百万级数据秒开。
  • 🔐 数据安全: 纯本地运行 (localhost),数据文件绝对不会上传到任何云端,公司敏感数据也能放心看。
  • 🛠 格式通吃: 支持 CSV, Parquet, Excel (.xlsx), JSON, JSONL, SQLite 等多种格式。
  • 🖱 交互友好: 支持列排序、正则筛选、列类型转换 (Int/Float/Date),右键菜单操作。

技术实现:为什么能这么快?

很多 Web 版 CSV 查看器卡顿,是因为把所有数据都发给了前端。VisiLens 做了两个层面的优化:

1. 后端 (FastAPI + VisiData)

我没有重新造轮子,而是复用了 VisiData 的 Core。VisiData 在处理大文件时使用了流式处理和内存映射,非常高效。 FastAPI 仅作为一个“桥梁”,前端请求哪一页的数据,后端就只切片返回哪一页的数据 (Pagination),内存占用极低。

2. 前端 (React + Virtualization)

前端使用了 虚拟滚动 (Virtual Scrolling) 技术。 哪怕有 100 万行数据,浏览器 DOM 树中永远只渲染你屏幕上看到的那几十行 <div>。当你滚动时,动态替换内容。这保证了无论数据量多大,滚动都丝般顺滑,不会炸内存。


快速上手

VisiLens 是一个 Python 包,直接用 pip 安装即可:

# 需要 Python 3.10+
pip install visilens