跳至内容

文件

GenAIScript 提供对工作区文件系统以及用户界面中所选文件的访问权限。

文件路径是基于项目工作区文件夹的根目录。在Visual Studio Code中,这是打开的根文件夹(目前暂不支持多根工作区)。使用命令行时,工作区根目录是启动CLI时的当前工作目录。

env.files

变量 env.files 包含一个文件数组,这些文件是通过用户界面或命令行由用户选择的。

您可以直接在def函数中传递env.files并为文件添加额外的过滤器。

def("PDFS", env.files, { endsWith: ".pdf" })

.gitignore.gitignore.genai

默认情况下,在选择文件时会遵循 .gitignore(工作区级别)和 .gitignore.genai(项目级别)文件的规则。

通过将ignoreGitIgnore选项设置为true来关闭此模式:

script({
// don't filter env.files
ignoreGitIgnore: true,
})

或者在cli run命令上:

终端窗口
genaiscript run --ignore-git-ignore

.gitignore.genai 是一个额外的文件,用于过滤项目中的文件。当您想要排除项目中与脚本无关的文件时(超出.gitignore文件范围),这个文件非常有用。

文件输出

使用defFileOutput来指定允许的文件输出路径以及这些文件用途的描述。

defFileOutput("src/*.md", "Product documentation in markdown format")

workspace

workspace 对象提供对工作区文件系统的访问。

findFiles

在工作区下执行文件搜索。支持通配符模式。

const mds = await workspace.findFiles("**/*.md")
def("DOCS", mds)

默认情况下会遵循.gitignore文件的规则。您可以通过将ignoreGitIgnore选项设置为true来禁用此行为。

grep

在工作空间下的文件中执行正则表达式'grep'搜索,使用ripgrep工具。搜索模式可以是字符串或正则表达式。

const { files } = await workspace.grep("monkey", "**/*.md")
def("FILE", files)

该模式也可以是正则表达式,在这种情况下,区分大小写遵循正则表达式选项。

const { files } = await workspace.grep(/[a-z]+\d/i, "**/*.md")
def("FILE", files)

默认情况下会遵循.gitignore文件。您可以通过将ignoreGitIgnore选项设置为true来禁用此行为。

readText

读取文件内容作为文本,相对于工作区根目录。

const file = await workspace.readText("README.md")
const content = file.content

它会自动将PDF和DOCX文件转换为文本。

readJSON

将文件内容读取为JSON格式(使用JSON5解析器)。

const data = await workspace.readJSON("data.json")

readXML

以XML格式读取文件内容。

const data = await workspace.readXML("data.xml")

readCSV

以CSV格式读取文件内容。

const data = await workspace.readCSV("data.csv")

在TypeScript中,你可以对输出进行类型定义。

const data = await workspace.readCSV<{ name: string; value: number }>(
"data.csv"
)

writeText

将文本写入文件,相对于工作区根目录。

await workspace.writeText("output.txt", "Hello, world!")

路径

paths 对象包含用于操作文件名的辅助方法。

当前路径 vs 工作区路径

默认情况下,文件是相对于工作区根目录解析的。您可以使用path对象来解析相对于当前规范env.spec的路径。

const cur = path.dirname(env.spec.filename)
const fs = path.join(cur, "myfile.md)

全局匹配模式

文件路径"通配符"是用于匹配文件和目录名称的模式。它们通常在类Unix操作系统和编程语言中使用,通过通配符来指定文件名集合。本节介绍在文件路径中使用通配符与workspace.findFiles的基本方法。

全局模式可以有以下语法:

  • * 用于匹配路径段中的零个或多个字符
  • ? 用于匹配路径段中的一个字符
  • ** 用于匹配任意数量的路径段,包括零个
  • {} 用于分组条件(例如 **/*.{ts,js} 匹配所有TypeScript和JavaScript文件)
  • [] 用于声明路径段中要匹配的字符范围(例如,example.[0-9] 可以匹配 example.0、example.1 等)
  • [!...] 用于否定路径段中的字符匹配范围(例如,example.[!0-9] 可以匹配 example.a、example.b,但不匹配 example.0)

注意:反斜杠(\)在全局模式中无效。如果您有一个现有的文件路径需要匹配,建议使用相对模式支持,它会自动将任何反斜杠转换为斜杠。否则,在创建全局模式时,请确保将所有反斜杠转换为斜杠。