ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

rainbow_csv

mechatroner ST3

🌈Rainbow CSV - Sublime Text 软件包:高亮 CSV 和 TSV 文件中的列,并使用类似于 SQL 的语言运行查询

标签 csv, tsv, 高亮

详细信息

安装

  • 总数 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

读取文件

源代码
raw.​githubusercontent.​com

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库。

官方网站

主要特性

  • SELECTUPDATEWHEREORDER 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和其他类似插件

RBQL