golang标准库path/filepath使用示例


文章目录

  • 前言
  • 一、常用方法示例
    • 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.mzph.cn/news/893028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则,能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用,…

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (三、影视搜索页功能实现)

在HarmonyOS NEXT开发环境中,可以使用nutpi/axios库来简化网络请求的操作。本文将展示如何使用HarmonyOS NEXT框架和nutpi/axios库,从零开始实现一个简单的影视APP,主要关注影视搜索页的功能实现。 为什么选择nutpi/axios? nutpi…

天机学堂3-ES+Caffeine

文章目录 day05-问答系统表 用户端分页查询问题目标效果代码实现 3.6.管理端分页查询问题ES相关 管理端互动问题分页实现三级分类3.6.5.2.多级缓存3.6.5.3.CaffeineTODO:使用Caffeine作为本地缓存,另外使用redis或者memcache作为分布式缓存,构…

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊,屡战屡败,最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder,跟matlab最像,也最容易入手。 从VScode上搞python,最后安装到appdata上,安装插…

智能新浪潮:亚马逊云科技发布Amazon Nova模型

在2024亚马逊云科技re:Invent全球大会上,亚马逊云科技宣布推出新一代基础模型Amazon Nova,其隶属于Amazon Bedrock,这些模型精准切入不同领域,解锁多元业务可能,为人工智能领域带来革新。 带你认识一起了解Amazon Nova…

flutter 装饰类【BoxDecoration】

装饰类 BoxDecoration BoxDecoration 是 Flutter 中用于控制 Container 等组件外观的装饰类,它提供了丰富的属性来设置背景、边框、圆角、阴影等样式。 BoxDecoration 的主要属性 1.color 背景颜色。类型:Color?示例: color: Colors.blu…

Datawhale-self-llm-Phi-4 Langchain接入教程

本项目是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者…

某讯一面,感觉问Redis的难度不是很大

前不久,有位朋友去某讯面试,他说被问到了很多关于 Redis 的问题,比如为什么用 Redis 作为 MySQL 的缓存?Redis 中大量 key 集中过期怎么办?如何保证缓存和数据库数据的一致性?我将它们整理出来,…

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)

本文项目编号 T 141 ,文末自助获取源码 \color{red}{T141,文末自助获取源码} T141,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

NVIDIA发布个人超算利器project digital,标志着ai元年的开启

上图NVIDIA公司创始人兼首席执行官 黄仁勋(Jensen Huang) 这些年被大家熟知的赛博朋克风格一直都是未来的代言词,可以承载人类记忆的芯片,甚至能独立思考的仿生人,现在,随着NVIDIA的project digital发布之后…

海云安开发者安全智能助手D10荣膺 “ AI标杆产品 ” 称号,首席科学家齐大伟博士入选2024年度 “ 十大杰出青年 ”

2024年12月27日,粤港澳大湾区AI领袖峰会在深圳成功举办,大会表彰了在人工智能技术创新、应用实践和产业发展等方面取得优异成绩的企业和个人,深圳海云安网络安全技术有限公司开发者安全智能助手D10荣膺“AI标杆产品”称号。同时,公…

第23篇 基于ARM A9处理器用汇编语言实现中断<五>

Q:怎样修改HPS Timer 0定时器产生的中断周期? A:在上一期实验的基础上,可以修改按键中断服务程序,实现红色LED上的计数值递增的速率,主程序和其余代码文件不用修改。 实现以下功能:按下KEY0…

R语言绘图

多组火山图 数据准备&#xff1a; 将CSV文件同一在一个路径下&#xff0c;用代码合并 确保文件列名正确 library(fs) library(dplyr) library(tidyr) library(stringr) library(ggplot2) library(ggfun) library(ggrepel)# 获取文件列表 file_paths <- dir_ls(path &quo…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(六)

文章目录 一、考试管理模块实现1、添加考试功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、考试管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码下载…

HTML中如何保留字符串的空白符和换行符号的效果

有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} &#xff0c; HTML中想要保留 \n的换行效果的有下面3种方法&#xff1a; 1、style 中 设置 white-space: pre-lin…

SpringMVC (2)

目录 1. RequestMapping 注解介绍 2. RequestMapping 使用 3. RequestMapping与请求方式 3.1 RequestMapping 支持Get和Post类型的请求 3.2 RequestMapping 指定接收某种请求 3.3 GetMapping和PostMapping 4. 传参 4.1 通过查询字符串传参 4.2 在 Body 中传参 4.2.1 …

RPA赋能内容创作:打造小红书入门词语图片的全自动化流程

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 用RPA全自动化批量生产【入门词语】图片做小红书商单&#xff0c;保姆级工具开发教程 最近由…

css 实现自定义虚线

需求&#xff1a; ui 画的图是虚线&#xff0c;但是虚线很宽正常的border 参数无法做到 进程&#xff1a; 尝试使用 border&#xff1a;1px dashed 发现使用这个虽然是虚线但是很短密密麻麻的 这并不是我们想要的那就只能换方案 第一个最简单&#xff0c;让ui 画一个图然…

【机器学习实战入门】使用Python进行MNIST手写数字识别

什么是手写数字识别&#xff1f; 手写数字识别是计算机识别手写数字的能力。这对手工制造的设备来说是一个难题&#xff0c;因为手写数字并不完美&#xff0c;且人们书写数字的方式多种多样。手写数字识别旨在解决这一问题&#xff0c;通过使用数字的图像来识别该图像中的数字…