用于解析、生成和查询路径的可加载 SQLite 扩展。基于 cwalk
在浏览器中试用并在 Introducing sqlite-path: A SQLite extension for parsing and generating file paths (2022 年 8 月) 中了解更多信息
.load ./path0
select path_dirname('foo/bar.txt'); -- 'foo/'
select path_basename('foo/bar.txt'); -- 'bar.txt'
select path_extension('foo/bar.txt'); -- '.txt'
select path_part_at('foo/bar/baz.txt', 0); -- 'foo'
select path_part_at('foo/bar/baz.txt', 1); -- 'bar'
select path_part_at('foo/bar/baz.txt', -1); -- 'baz.txt'
遍历路径中的所有部分。
select *
from path_parts('/usr/bin/sqlite3');
/*
┌────────┬─────────┐
│ type │ part │
├────────┼─────────┤
│ normal │ usr │
│ normal │ bin │
│ normal │ sqlite3 │
└────────┴─────────┘
*/
在 SQLite 源代码的 ZIP 归档文件中,查找 ext/
目录下层级最深的 5 个 .c
源代码文件(使用 SQLite 的 ZIP 支持)。
select
name,
path_length(name) as depth
from zipfile('sqlite.archive.master.zip')
where
-- under the ext/ directory
path_part_at(name, 1) == 'ext'
-- ends in ".c"
and path_extension(name) == '.c'
order by 2 desc
limit 5;
/*
┌────────────────────────────────────────────┬───────┐
│ name │ depth │
├────────────────────────────────────────────┼───────┤
│ sqlite-master/ext/fts3/tool/fts3view.c │ 5 │
│ sqlite-master/ext/lsm1/lsm-test/lsmtest1.c │ 5 │
│ sqlite-master/ext/lsm1/lsm-test/lsmtest2.c │ 5 │
│ sqlite-master/ext/lsm1/lsm-test/lsmtest3.c │ 5 │
│ sqlite-master/ext/lsm1/lsm-test/lsmtest4.c │ 5 │
└────────────────────────────────────────────┴───────┘
*/
使用 fsdir()
生成当前目录下文件扩展名数量的直方图。
select
path_extension(name),
count(*),
printf('%.*c', count(*), '*') as bar
from fsdir('.')
where path_extension(name) is not null
group by 1
order by 2 desc
limit 6;
/*
┌──────────────────────┬──────────┬────────────────────────────────────┐
│ path_extension(name) │ count(*) │ bar │
├──────────────────────┼──────────┼────────────────────────────────────┤
│ .md │ 34 │ ********************************** │
│ .sample │ 26 │ ************************** │
│ .c │ 21 │ ********************* │
│ .css │ 5 │ ***** │
│ .yml │ 4 │ **** │
│ .h │ 4 │ **** │
└──────────────────────┴──────────┴────────────────────────────────────┘
*/
请参阅 docs.md
以获取完整的 API 参考。
语言/工具 | 安装方法 | |
---|---|---|
Python | pip install sqlite-path |
|
Datasette | datasette install datasette-sqlite-path |
|
Node.js | npm install sqlite-path |
|
Deno | deno.land/x/sqlite_path |
|
Ruby | gem install sqlite-path |
|
GitHub 发布 |
发布页面包含适用于 Linux amd64、MacOS amd64(不含 arm)和 Windows 的预编译二进制文件。
如果您想将 sqlite-path
用作 运行时可加载扩展,请从发布版本下载 path0.dylib
(适用于 MacOS)、path0.so
(适用于 Linux)或 path0.dll
(适用于 Windows)文件,并将其加载到您的 SQLite 环境中。
注意:文件名中的
0
(path0.dylib
/path0.so
/path0.dll
)表示sqlite-path
的主版本号。目前sqlite-path
是 v1 版本之前,因此未来版本可能会有重大更改。
例如,如果您正在使用 SQLite CLI,可以这样加载库
.load ./path0
select path_version();
-- v0.0.1
或者在 Python 中,使用内置的 sqlite3 模块
import sqlite3
con = sqlite3.connect(":memory:")
con.enable_load_extension(True)
con.load_extension("./path0")
print(con.execute("select path_version()").fetchone())
# ('v0.0.1',)
或者在 Node.js 中,使用 better-sqlite3
const Database = require("better-sqlite3");
const db = new Database(":memory:");
db.loadExtension("./path0");
console.log(db.prepare("select path_version()").get());
// { 'html_version()': 'v0.0.1' }
或者使用 Datasette
datasette data.db --load-extension ./path0
- sqlite-url,用于解析和生成 URL(与此库搭配使用效果好)
- sqlite-http,用于在 SQLite 中进行 HTTP 请求
- sqlite-html,用于解析 HTML 文档
- sqlite-lines,用于逐行读取大文件
- nalgeon/sqlean,几个用 C 编写的预编译实用 SQLite 函数