golang标准库path/filepath使用示例

news/2025/1/19 19:32:24/

文章目录

  • 前言
  • 一、常用方法示例
    • 1.将相对路径转换为绝对路径
    • 2.获取路径中最后一个元素
    • 3.获取路径中除去最后一个元素的部分
    • 4.路径拼接
    • 5.将路径拆分为目录和文件名两部分
    • 6.返回一个相对路径
    • 7.文件路径遍历
    • 8.根据文件扩展名过滤文件
    • 9.使用正则表达式进行路径匹配


前言

path/filepath包是一个非常重要的工具包,它提供了一系列函数用于操作和处理文件路径。在实际运维工具开发中肯定会涉及构建文件路径、解析路径中的各个部分、还是遍历目录树、读取文件等操作,path/filepath包都提供了便捷的方法来实现这些功能。
参考文档: https://pkg.go.dev/path/filepath


一、常用方法示例

1.将相对路径转换为绝对路径

代码如下(示例):

func Abs(path string) (string, error)
使用Abs方法实现,接收一个string类型参数返回string类型和错误package mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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) errorpackage mainimport ("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)}
}

该处使用的url网络请求的数据。

8.根据文件扩展名过滤文件

代码如下(示例):

// 在WalkFunc中添加条件来过滤特定扩展名的文件
package mainimport ("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 mainimport ("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)}
}

在这里插入图片描述



http://www.ppmy.cn/news/1564488.html

相关文章

微信消息群发(定时群发)-UI自动化产品(基于.Net平台+C#)

整理 | 小耕家的喵大仙 出品 | CSDN(ID:lichao19897314) 关联源码及工具下载https://download.csdn.net/download/lichao19897314/90096681https://download.csdn.net/download/lichao19897314/90096681https://download.csdn.net/download/…

SpringBoot中整合RabbitMQ(测试+部署上线 最完整)

目录 一、RabbitMQ安装 二、启动RabbitMQ 三、编写Java代码 1、引入依赖 2、配置yml 3、配置消息转换器 4、编写接收方接收消息 5、编写发送方发送消息 6、小程序验证 三、宝塔中安装RabbitMQ 1、下载erlang (1)查看rabbitmq的版本 &#x…

【数据分析与可视化】Python绘制数据地图-GeoPandas地图可视化

本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoPandas。G…

Next.js 与 React.js 的对比分析

核心区别的理解React.js 是一个专注于构建 UI 组件的库,它灵活但需要自行搭配其他工具(如 React Router)才能构建完整的应用。而 Next.js 则是在 React 基础上发展出来的框架,自带服务端渲染(SSR)、静态站点…

Python基于matplotlib和plottable库绘制精美表格

在Python中,matplotlib 是一个强大的绘图库,但它本身并不直接支持创建精美的表格。然而,你可以使用 matplotlib 的 table 功能来在图表中嵌入表格。此外,plottable 并不是一个广泛认知的与 matplotlib 直接相关的库(至…

基于docker微服务日志ELK+Kafka搭建

ELK 是 Elasticsearch 、 Logstash 、 Kibana 的简称 Elasticsearch 是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放 REST 和 JAVA API 等结构提供高效搜索功能,可扩展的分布式系统。它构建于 Apache Lucene 搜索引…

在 Windows 上,如果忘记了 MySQL 密码 重置密码

在 Windows 上,如果忘记了 MySQL 密码,可以通过以下方法重置密码: 方法 1:以跳过权限验证模式启动 MySQL 并重置密码 停止 MySQL 服务: 打开 命令提示符 或 PowerShell,输入以下命令停止 MySQL 服务&#…

ChatGPT升级AI私人助理功能:新增定时播报全网热点与定制每日学习健身计划

ChatGPT 可以通过 Tasks 功能,设置发送每周全球新闻简报、提供每日 15 分钟健身计划、设置语言学习等任务提醒、发送每日笑话、创建每日晚餐计划、提醒生日等重要事件。 1 月 15 日消息,OpenAI 公司今天在 X 平台发布推文,宣布以测试版形式&a…