golang标准库path/filepath使用示例
文章目录
前言
path/filepath包是一个非常重要的工具包,它提供了一系列函数用于操作和处理文件路径。在实际运维工具开发中肯定会涉及构建文件路径、解析路径中的各个部分、还是遍历目录树、读取文件等操作,path/filepath包都提供了便捷的方法来实现这些功能。
参考文档: https://pkg.go.dev/path/filepath
一、常用方法示例
1.将相对路径转换为绝对路径
代码如下(示例):
func Abs(path string) (string, error)
使用Abs方法实现,接收一个string类型参数返回string类型和错误
package main
import (
"fmt"
"path/filepath"
)
func main() {
//相对路径
relativePath := "./graylog/docker-compose.yml"
absolutePath, err := filepath.Abs(relativePath)
if err != nil {
fmt.Println("Error:", err)
}
//绝对路径
fmt.Println("Absolute Path:", absolutePath)
}
2.获取路径中最后一个元素
代码如下(示例):
// func Base(path string) string
// 如果路径为空字符串,Base返回.
// 相当于获取目录下的子文件或子目录
package main
import (
"fmt"
"path/filepath"
)
func main() {
relativePath := "/var/log/message"
absolutePath := filepath.Base(relativePath)
fmt.Println("Absolute Path:", absolutePath)
}
3.获取路径中除去最后一个元素的部分
代码如下(示例):
// func Dir(path string) string
// Dir函数返回路径中除去最后一个元素的部分,即路径的目录部分。如果路径为空字符串,Dir返回.
// 相当于获取某个文件或目录的父级目录
package main
import (
"fmt"
"path/filepath"
)
func main() {
relativePath := "/export/graylog/es_data"
absolutePath := filepath.Dir(relativePath)
fmt.Println("Absolute Path:", absolutePath)
}
4.路径拼接
代码如下(示例):
func Join(elem ...string) string
// 将任意数量的路径元素连接成一个单一路径,并根据需要添加斜杠
package main
import (
"fmt"
"path/filepath"
)
func main() {
path1 := "/export/graylog"
path2 := "es_data"
fullPath := filepath.Join(path1, path2)
fmt.Println("Full Path:", fullPath)
}
5.将路径拆分为目录和文件名两部分
代码如下(示例):
func Split(path string) (dir, file string)
package main
import (
"fmt"
"path/filepath"
)
func main() {
path := "/export/graylog/docker-compose.yml"
dir, file := filepath.Split(path)
fmt.Println("Directory:", dir)
fmt.Println("File:", file)
}
6.返回一个相对路径
代码如下(示例):
func Rel(basepath, targpath string) (string, error)
// 将base目录作为起点,目标目录作为终点
package main
import (
"fmt"
"path/filepath"
)
func main() {
basepath := "/export"
targpath := "/export/graylog/docker-compose.yml"
relativePath, err := filepath.Rel(basepath, targpath)
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println("Relative Path:", relativePath)
}
7.文件路径遍历
代码如下(示例):
// Walk和WalkDir函数用于遍历指定目录下的所有文件和子目录,并在遍历过程中打印每个访问的路径
func Walk(root string, walkFn WalkFunc) error
func WalkDir(root string, walkFn WalkDirFunc) error
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
root := "/export/graylog"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
fmt.Println("Visited:", path)
return nil
})
if err != nil {
fmt.Println("Error:", err)
}
}
8.根据文件扩展名过滤文件
代码如下(示例):
// 在WalkFunc中添加条件来过滤特定扩展名的文件
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
root := "/export"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if filepath.Ext(path) == ".yml" {
fmt.Println("Visited:", path)
}
return nil
})
if err != nil {
fmt.Println("Error:", err)
}
}
9.使用正则表达式进行路径匹配
代码如下(示例):
package main
import (
"fmt"
"os"
"path/filepath"
"regexp"
)
func main() {
// 目录路径
dir := "/export/graylog"
// 正则表达式,用来匹配 .yml 或 .xml 结尾的文件
pattern := `\.yml$|\.xml$`
re, err := regexp.Compile(pattern)
if err != nil {
fmt.Println("Error compiling regex:", err)
return
}
// 使用 filepath.Walk 遍历目录及子目录
err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Println("Error walking path:", err)
return err
}
// 如果是文件且符合后缀名要求,进行匹配
if !info.IsDir() && re.MatchString(info.Name()) {
fmt.Println("Matched file:", path)
}
return nil
})
if err != nil {
fmt.Println("Error during Walk:", err)
}
}
原文地址:https://blog.csdn.net/weixin_50902636/article/details/145227143
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!