rainbow_csv
🌈Rainbow CSV - Sublime Text 软件包:高亮 CSV 和 TSV 文件中的列,并使用类似于 SQL 的语言运行查询
详细信息
安装
- 总数 47K
- Win 21K
- Mac 18K
- Linux 8K
8月6日 | 8月5日 | 8月4日 | 8月3日 | 8月2日 | 8月1日 | 7月31日 | 7月30日 | 7月29日 | 7月28日 | 7月27日 | 7月26日 | 7月25日 | 7月24日 | 7月23日 | 7月22日 | 7月21日 | 7月20日 | 7月19日 | 7月18日 | 7月17日 | 7月16日 | 7月15日 | 7月14日 | 7月13日 | 7月12日 | 7月11日 | 7月10日 | 7月9日 | 7月8日 | 7月7日 | 7月6日 | 7月5日 | 7月4日 | 7月3日 | 7月2日 | 7月1日 | 6月30日 | 6月29日 | 6月28日 | 6月27日 | 6月26日 | 6月25日 | 6月24日 | 6月23日 | 6月22日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 7 | 8 | 2 | 5 | 10 | 11 | 12 | 5 | 10 | 5 | 0 | 12 | 13 | 15 | 19 | 21 | 6 | 5 | 9 | 18 | 11 | 18 | 5 | 2 | 3 | 12 | 8 | 18 | 14 | 10 | 3 | 7 | 10 | 12 | 10 | 9 | 10 | 1 | 6 | 13 | 11 | 9 | 11 | 13 | 3 | 3 |
Mac | 20 | 13 | 2 | 5 | 13 | 11 | 14 | 12 | 12 | 1 | 0 | 9 | 15 | 15 | 11 | 16 | 7 | 4 | 10 | 15 | 12 | 13 | 5 | 4 | 1 | 9 | 9 | 11 | 8 | 17 | 1 | 2 | 9 | 13 | 12 | 11 | 13 | 6 | 3 | 6 | 14 | 4 | 10 | 7 | 4 | 4 |
Linux | 2 | 4 | 0 | 3 | 3 | 2 | 8 | 4 | 2 | 1 | 2 | 1 | 3 | 2 | 4 | 3 | 3 | 2 | 3 | 1 | 3 | 10 | 3 | 1 | 1 | 4 | 1 | 4 | 3 | 3 | 0 | 2 | 3 | 3 | 2 | 7 | 6 | 1 | 1 | 4 | 5 | 1 | 4 | 2 | 2 | 1 |
读取文件
Rainbow CSV
主要功能
- 以不同彩虹色高亮 *.csv、*.tsv 及其他分隔文件中的列。
- 鼠标悬停时显示列信息。
- 检查 CSV 文件的连续性(CSVLint)
- 使用空格对齐列并收缩(删除字段中的空格)
- 执行类似于 SQL 的 RBQL 查询。
使用方法
Rainbow CSV 具有基于内容的 csv/tsv 自动检测机制。这意味着即使这些文本文件没有“.csv”或“.tsv”扩展名,该软件包也会分析这些文本文件。
Rainbow 突出显示也可以通过 Sublime 文件上下文菜单手动启用(请参阅下面的演示动图)
1. 选择一个或多个字符,用光标标记作为分隔符 2. 右键单击:上下文菜单 -> Rainbow CSV -> 启用 …
您也可以使用相同的上下文菜单禁用彩虹突出显示并返回到原始文件的突出显示。
此功能可以用于临时高亮显示非表格文件。
手动启用/禁用彩虹突出显示演示动图
Rainbow CSV 还允许您使用 RBQL 语言执行类似于 SQL 的查询,请参见下面的演示动图
要运行 RBQL 查询,请按 F5 或从文件上下文菜单中选择“Rainbow CSV” -> “运行 RBQL 查询”选项。
键盘映射
键 | 操作 |
---|---|
F5 | 为当前 CSV 文件开始查询编辑 |
命令
Rainbow CSV: 启用简单
在运行命令之前,您需要使用您的光标选择分隔符(单个或多个字符)。将选定的字符设置为分隔符并启用语法高亮。如果不存在,Sublime 将生成语法文件。简单方言完全忽略双引号:即分隔符不能在双引号字段中转义。
彩虹CSV:启用标准
与启用简单命令相同,但双引号字段中可以转义分隔符。
彩虹CSV:CSVLint
检查以下内容
* CSV行中双引号使用的istency
* 每个CSV行中字段数量的istency
彩虹CSV:运行RBQL查询
为当前文件运行RBQL查询。
与F5按钮不同,即使当前文件不是CSV表格也能工作:在这种情况下,只有两个变量“a1”和“NR”可用。
彩虹CSV:使用空间对齐CSV列
在当前文件中使用空间对齐CSV列
彩虹CSV:缩小CSV表格
从当前文件的所有字段中删除前导和尾随空格
配置
要调整插件配置
1. 前往“首选项” -> “包设置” -> “彩虹CSV” -> “设置”。
2. 在右侧更改您想设置的设置。
配置参数
要配置扩展,请点击“首选项” -> “包设置” -> “彩虹CSV” -> “设置”
“allow_newlines_in_fields”
允许按RFC-4180中定义的方式使用带引号的换行多行字段。
“enable_rainbow_csv_autodetect”
启用基于内容的内容分隔符自动检测。具有“.csv”和“.tsv”扩展名的文件无论此选项的值如何都会高亮显示。
“rainbow_csv_autodetect_dialects”
要自动检测的CSV方言列表。
如果“enable_rainbow_csv_autodetect”设置为false,则忽略此设置。
“rainbow_csv_max_file_size_bytes”
禁用比指定大小大的文件上的Rainbow CSV。这可以有助于防止大型文件的性能下降和崩溃。
手动选择分隔符将覆盖此设置当前文件。
例如,要禁用大于100 MB的文件,请设置"rainbow_csv_max_file_size_bytes": 100000000
“use_custom_rainbow_colors”
使用自定义高对比度彩虹颜色而不是您当前配色方案提供的颜色。启用此选项时,默认同时启用“auto_adjust_rainbow_colors”。
“auto_adjust_rainbow_colors”
自动调整Packages/User/RainbowCSV.sublime-color-scheme的颜色。
Rainbow CSV将自动生成具有高对比度颜色的颜色方案,使CSV列更容易区分。
您可以在不取消选中此设置的情况下禁用此设置并手动自定义Rainbow CSV颜色方案在Packages/User/RainbowCSV.sublime-color-scheme
,您可以使用以下RainbowCSV.sublime-color-scheme文件作为自定义的起点。请不要在没有禁用此设置的情况下手动自定义Packages/User/RainbowCSV.sublime-color-scheme,因为在这种情况下,插件将重新写入它。此选项仅当“use_custom_rainbow_colors”设置为true时才有效
“rbql_backend_language”
RBQL后端语言。
支持值:“Python”,“JS”
要使用RBQL与JavaScript (JS) 一起,您需要安装Node JS并将其添加到您的系统路径中。
“rbql_with_headers”
默认值:false RBQL将处理所有输入和连接文件中的第一条记录作为标题。
如果大多数您处理的CSV文件都有标题,您可以为此设置值true。
您可以通过在查询末尾添加WITH (header)
或WITH (noheader)
来在查询级别覆盖此设置。
“rbql_output_format”
RBQL结果集合表的格式。
支持值:“tsv”,“csv”,“input”
* input: 与输入表相同格式 * tsv: 制表符分隔值。 * csv:Excel兼容,并允许带引号的逗号。
示例:要始终使用“tsv”作为输出格式,请将以下行添加到设置文件中:"rbql_output_format": "tsv",
“rbql_encoding”
RBQL用于文件和查询的编码。
支持值: “latin-1”, “utf-8”
参考
- 此Sublime Text插件是Vim的rainbow_csv 插件的改编。
RBQL(Rainbow查询语言)描述
RBQL是一个基于评估的类似SQL的查询引擎,用于处理CSV文件(不仅限于)。它提供类似SQL的语言,支持使用Python或JavaScript表达式进行SELECT查询。
RBQL非常适合数据转换、数据清理和数据分析。
RBQL附带CLI应用程序、文本编辑器插件、Python和JS库。
主要特性
- 在SELECT、UPDATE、WHERE和ORDER BY语句中使用Python或JavaScript表达式。
- 支持多种输入格式
- 任何查询的结果集立即成为它自己的第一等表
- 当输入表由当前上下文定义时,不需要在查询中提供FROM语句。
- 支持所有主要SQL关键词
- 支持聚合函数和GROUP BY查询
- 支持用户自定义函数(UDF)
- 提供一些传统SQL引擎不具有的新实用查询模式
- 轻量级,无依赖项,开箱即用
限制
- RBQL不支持嵌套查询, but 可以用连续查询来仿真
- 所有JOIN查询中的表的数量始终是2(输入表和连接表),使用连续查询来连接3个或更多表
支持的SQL关键词(关键词不区分大小写)
- SELECT
- UPDATE
- WHERE
- ORDER BY … [ DESC | ASC ]
- [ LEFT | INNER ] JOIN
- DISTINCT
- GROUP BY
- TOP N
- LIMIT N
- AS
所有关键词的含义与SQL查询中相同。您可以在这里检查它们 在线
RBQL变量
R BQL为CSV文件提供了以下变量,您可以在查询中使用它们:
- a1, a2,…, a{N}
变量类型: string
描述:输入表中当前记录的第i个字段的值 - b1, b2,…, b{N}
变量类型: string
描述:连接表B中当前记录的第i个字段的值 - NR
变量类型: integer
描述:记录号(基数为1) - NF
变量类型: integer
描述:当前记录中的字段数 - a.name, b.Person_age,…a.{Good_alphanumeric_column_name}
变量类型: string
描述:引用其“name”的引用字段的值。如果您想用良好的字母数字名称表示表头中的字段,则可以使用此表示法 - a[“object id”], a['9.12341234'],b[“%$ !! 10 20”] … a[“任意列名称!”]
变量类型: string
描述:引用其“name”的引用字段的值。您可以使用此表示法通过在表头中使用任意值来引用字段
UPDATE语句
UPDATE查询会根据UPDATE表达式替换原始值,因此也可以将其视为一种特殊的SELECT查询。
聚合函数和查询
RBQL支持以下聚合函数,也可以与GROUP BY关键词一起使用
COUNT, ARRAY_AGG, MIN, MAX, SUM, AVG, VARIANCE, MEDIAN
限制:Python(或JS)表达式内的聚合函数不受支持。 虽然您可以在聚合函数中使用表达式。
例如 MAX(float(a1) / 1000)
- 有效; MAX(a1) / 1000
- 无效。
对于上述限制,有一种针对ARRAY_AGG函数的工作区,它支持可选参数 - 一个可以进行聚合数组操作的回调函数。 示例
SELECT a2, ARRAY_AGG(a1, lambda v: sorted(v)[:5]) GROUP BY a2
- Python; SELECT a2, ARRAY_AGG(a1, v => v.sort().slice(0, 5)) GROUP BY a2
- JS
连接语句
可以按文件路径或名称引用连接表B,名称是一个用户在执行连接查询之前应提供的任意字符串。
RBQL支持严格左连接,就像左连接,但如果左表“A”中的任何键在右表“B”中没有正好匹配的一个键,它将生成一个错误。
表B的路径可以是相对于工作目录、相对于主表或绝对路径。
限制:连接语句不能包含Python/JS表达式,必须具有以下形式: (/path/to/table.tsv | table_name ) ON a... == b... [AND a... == b... [AND ... ]]
SELECT EXCEPT语句
SELECT EXCEPT可以用来选择除了特定列以外的所有内容。例如,要选择除了第2列和第4列之外的所有内容,请运行:SELECT * EXCEPT a2, a4
传统SQL引擎不支持此查询模式。
UNNEST()运算符
UNNEST(list)接受一个列表/数组作为参数,并且根据列表/数组的每个值重复输出记录-每个值对应一次。
示例:SELECT a1, UNNEST(a2.split(';'))
LIKE()函数
RBQL不支持LIKE运算符,而是提供了“like()”函数,可以使用如下:SELECT * where like(a1, 'foo%bar')
WITH (header)和WITH (noheader)语句
您可以使用环境配置参数来设置输入(和连接)CSV文件是否具有标题,这些参数可以是CLI标志--with_headers
、GUI复选框或其他。但是,也可以通过在查询末尾添加WITH (header)
或WITH (noheader)
语句直接覆盖此选择。例如:select top 5 NR, * with (header)
用户定义函数(UDF)
RBQL支持用户定义函数
您可以在两个特殊文件中定义自定义函数和/或导入库
* ~/.rbql_init_source.py
- Python * ~/.rbql_init_source.js
- JavaScript
RBQL查询示例
使用Python表达式
SELECT TOP 100 a1, int(a2) * 10, len(a4) WHERE a1 == "Buy" ORDER BY int(a2) DESC
SELECT a.id, a.weight / 1000 AS weight_kg
SELECT * ORDER BY random.random()
- 随机排序- 例如:
SELECT len(a.vehicle_price) / 10, a2 WHERE int(a.vehicle_price) < 500 and a['Vehicle type'] in ["car", "plane", "boat"] limit 20
- 通过名称引用列并使用Python的“in”来模拟SQL的“in” UPDATE SET a3 = 'NPC' WHERE a3.find('Non-playable character') != -1
SELECT NR, *
- 列出身份记录,NR为从1开始SELECT * WHERE re.match(".*ab.*", a1) is not None
- 选择第一列有“ab”模式的条目SELECT a1, b1, b2 INNER JOIN ./countries.txt ON a2 == b1 ORDER BY a1, a3
- 连接查询示例SELECT MAX(a1), MIN(a1) WHERE a.Name != 'John' GROUP BY a2, a3
- 聚合查询示例SELECT *a1.split(':')
- 使用Python3展开运算符将一列拆分为多列。不要在其他SQL引擎中尝试此操作!
使用JavaScript表达式
SELECT TOP 100 a1, a2 * 10, a4.length WHERE a1 == "Buy" ORDER BY parseInt(a2) DESC
SELECT a.id, a.weight / 1000 AS weight_kg
- 例如:
SELECT * ORDER BY Math.random()
- 随机排序 - 例如:
SELECT TOP 20 a.vehicle_price.length / 10, a2 WHERE parseInt(a.vehicle_price) < 500 && ["car", "plane", "boat"].indexOf(a['Vehicle type']) > -1 limit 20
- 通过标题中的名称引用列 UPDATE SET a3 = 'NPC' WHERE a3.indexOf('Non-playable character') != -1
SELECT NR, *
- 列出身份记录,NR为从1开始SELECT a1, b1, b2 INNER JOIN ./countries.txt ON a2 == b1 ORDER BY a1, a3
- 连接查询示例SELECT MAX(a1), MIN(a1) WHERE a.Name != 'John' GROUP BY a2, a3
- 聚合查询示例SELECT ...a1.split(':')
- 使用JS“解构赋值”语法将一列拆分为多个。不要在其他SQL引擎上尝试这个!
参考
编辑器中的彩虹CSV和其他类似插件
- Vim 中的彩虹CSV扩展
- Visual Studio Code 中的彩虹CSV扩展
- Atom 中的rainbow-csv包
- gedit 中的rainbow_csv插件 - 不支持CSV中的引号逗号
- NEdit 中的rainbow_csv_4_nedit
- Nano 中的CSV高亮显示
- IntelliJ IDEA 中的Rainbow CSV
RBQL
- RBQL: 官方网站
- RBQL与Vim、VSCode、Sublime Text 和 Atom 编辑器的彩虹CSV扩展集成。
- npm中的RBQL:
$ npm install -g rbql
- PyPI中的RBQL:
$ pip install rbql