标准库之path和filepath

1|0一、Path包

  • 实现的功能和python的os模块的os.path的方法类似
  • 注意:该包只对 /路径有效,windows的\路径无效

1|11. 常用函数

  • path包实现了对用斜杠进行分隔的路径进行操作的函数
func IsAbs(path string) bool // 判断是否是一个绝对路径 func Split(path string) (dir, file string) // 将路径分割为路径和文件名,同python的os模块的os.path.split() func Join(elem ...string) string // 将多个字符串合并为一个路径,同python的os模块的os.path.join() func Ext(path string) string // 返回路径中扩展部分 func Base(path string) string // 返回路径的最后一个元素,同python的os模块的os.path.basename() func Dir(path string) string // 返回路径中目录部分 func Clean(path string) string // 返回同目录的最短路径 func Match(pattern, name string) (matched bool, err error) // 正则是否匹配路径(shell 文件名匹配)

1|22. 示例

package main import ( "fmt" "path" ) func main() { // 判断是否是一个绝对路径 //dir:="/Users/liuqingzheng/go/src/gin_test" file:="/Users/liuqingzheng/go/src/gin_test/static/css/common.css" isABS := path.IsAbs(file) fmt.Println(isABS) // 将路径分割为路径和文件名 dir:="/Users/liuqingzheng/go/src/gin_test/static/css/common.css" dir, file := path.Split(dir) fmt.Println(dir, file) // Users/liuqingzheng/go/src/gin_test/static/css/ common.css // 将多个字符串合并为一个路径 dirJoin := path.Join("Users/liuqingzheng/go/src/gin_test/static/", "css", "common.css") fmt.Println(dirJoin) // Users/liuqingzheng/go/src/gin_test/static/css/common.css // 返回路径中扩展 pf:="Users/liuqingzheng/go/src/gin_test/static/css/common.css" fileExt := path.Ext(pf) fmt.Println(fileExt) // .css // 返回路径的最后一个元素 pf:="Users/liuqingzheng/go/src/gin_test/static/css/common.css" dirBase := path.Base(pf) fmt.Println(dirBase) // common.css // 返回路径中目录部分 pf:="Users/liuqingzheng/go/src/gin_test/static/css/common.css" dir := path.Dir(pf) fmt.Println(dir) // Users/liuqingzheng/go/src/gin_test/static/css // 返回同目录的最短路径 dir1 := "/usr/../etc/../etc/ssh" fmt.Println(path.Clean(dir1)) // /etc/ssh // 正则是否匹配路径 isMatch, err := path.Match("*.json", "a.json")// true <nil> //isMatch, err := path.Match("*.xml", "a.json") //false <nil> fmt.Println(isMatch, err) }

2|0二、filepath

2|11. 常用函数

  • filepath 包实现了兼容各操作系统的文件路径操作函数。
filepath.Separator // 预定义变量,表示路径分隔符 / filepath.ListSeparator // 预定义变量,表示环境变量分隔符 : func Abs(path string) (string, error) // 返回path 相对当前路径的绝对路径 func Base(path string) string // 同python的os模块的os.path.basename() func Split(path string) (dir, file string) // 同python的os模块的os.path.split() func Join(path string) (dir, file string) // 同python的os模块的os.path.join() func Clean(path string) string // 返回path 的最短路径 func Rel(basepath, targpath string) (string, error) // 返回targpath 相对 basepath路径 func EvalSymlinks(path string) (string, error) // 返回软链指向的路径 func VolumeName(path string) string // 返回路径最前面的卷名 func ToSlash(path string) string // 路径分隔符替换为 / func FromSlash(path string) string // / 替换为路径分隔符 func SplitList(path string) []string // 分隔环境变量里面的路径 func Walk(root string, walkFn WalkFunc) error // 遍历 root 目录下的文件树,并调用 walkFunc ,功能类似python的os模块的os.walk()

2|22. 示例

package main import ( "fmt" "io/fs" "os" "path/filepath" ) func main() { // 预定义变量 fmt.Println(string(filepath.Separator), string(filepath.ListSeparator)) // / : // 返回path 相对当前路径的绝对路径 dir := "~/go/src/gin_test" //dir := "/Users/liuqingzheng/go/src/gin_test/" realDir, _ := filepath.Abs(dir) fmt.Println(realDir) // /Users/liuqingzheng/go/src/gin_test/~/go/src/gin_test // 返回path 的最短路径 dir := "/usr/../etc/../tmp" clear_dir := filepath.Clean(dir) fmt.Println(clear_dir) // \tmp // 返回basePath 相对 targPath路径 basePath, targPath := "/usr/local", "/usr/local/go/bin" relDir, err := filepath.Rel(basePath, targPath) fmt.Println(relDir, err) // go/bin <nil> // 返回软链指向的路径 symlink := "/usr/local/bin/python3" realDir, err := filepath.EvalSymlinks(symlink) fmt.Println(realDir, err) // /Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8 <nil> // 返回路径最前面的卷名 // Given "C:\foo\bar" it returns "C:" on Windows. // Given "\\host\share\foo" it returns "\\host\share". root := "/Users/liuqingzheng/go/src/gin_test" //root := `C:\foo\bar` vol := filepath.VolumeName(root) fmt.Println(vol) // 路径分隔符替换为 `/` root := "/usr/local/go" slash_dir := filepath.ToSlash(root) fmt.Println(slash_dir) // /usr/local/go // `/` 替换为路径分隔符 slash_dir:="/usr/local/go" from_slash := filepath.FromSlash(slash_dir) fmt.Println(from_slash) // \usr\local\go // 分隔环境变量里面的路径 env_path := "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/go/bin" env_slice := filepath.SplitList(env_path) for k, v := range env_slice { fmt.Println(k, v) } // 0 /usr/local/bin // 1 /usr/bin // 2 /bin // 3 /usr/sbin // 4 /sbin // 5 /opt/X11/bin // 6 /usr/local/go/bin // 遍历 root 目录下的文件树,并调用 walkFn root_dir, err := os.Getwd() err = filepath.Walk(root_dir, func(path string, info fs.FileInfo, err error) error { fmt.Println(path) return nil }) fmt.Println(err) }

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/18073094.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示