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