首页 > 其他分享 >标准库之path和filepath

标准库之path和filepath

时间:2024-03-14 16:12:01浏览次数:27  
标签:string filepath 路径 标准 func go path dir

目录

一、Path包

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

1. 常用函数

  • 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 文件名匹配)

2. 示例

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) 
}

二、filepath

1. 常用函数

  • 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. 示例

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)
}

标签:string,filepath,路径,标准,func,go,path,dir
From: https://www.cnblogs.com/Mcoming/p/18073094

相关文章

  • 标准库之context(很重要)
    目录标准库之context一、为什么需要context1.基本并发的示例2.全局变量方式的并发3.通道方式的并发4.官方版的方案二、Context初识1.Context接口2.两个顶级Context(1)Background()和TODO()(2)区别3.派生Context(With系列函数)(1)WithCancel(可取消context)i.context控制goroutin......
  • G. Path Prefixes
    原题链接题解深搜带上\(sum_a\),然后把经过的\(sum_b\)放入栈里,二分查找code#definelllonglong#include<bits/stdc++.h>usingnamespacestd;inlinevoidread(ll&x){ x=0; llflag=1; charc=getchar();while(c<'0'||c>'9......
  • 第四章 python的标准库
    第四章python的标准库一、`os`1.1基本功能1.2文件和目录操作1.2.1目录操作1.2.2文件操作1.3路径操作1.4环境变量1.4.1`os.environ`1.4.2`os.pathsep`1.4.3`os.name`1.4.4`os.system()`1.4.5`os.putenv(key,value)`和`os.unsetenv(key)`1.5进程管理1.5......
  • Rust 标准库 Trait 指南
    部分内容来自Rust2021年期刊内容目录引言Trait基础自动Trait泛型Trait格式化Trait操作符Trait转换Trait错误处理迭代器TraitI/OTrait总结引言你是否曾想过下面这些trait有什么不同?Deref<Traget=T>,AsRef<T>,以及Borrow<T>?Clone,Copy,和ToOwned?From......
  • (笔记)FPGA多周期路径及set_multicycle_path详解
    默认情况下综合工具会把每条路径定义为单周期路径,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。有的设计可能存在时序例外(timingexceptions),如多周期路径、虚假路径等。数据从起点到终点的传输时间需要一个时钟周期以上才能稳定......
  • 单据类型参数设置增加自定义参数并通过BOS标准函数调用
     1、BOS函数说明2、创建对应单据的【单据类型参数】,继承自【单据类型参数模版】。 3、在单据参数中绑定【单据类型参数对象】 4、参数设置设置对应参数 5、在BOS中调用标准函数进行使用。 ......
  • STM32标准库低功耗
    STM32标准库低功耗1.睡眠模式1.1.进入以及退出方法睡眠模式较为简单,仅需要简单调用函数即可,且函数定义处于内核层,不需要引用多余的头文件。睡眠模式:仅内核停止,所有外设仍旧运行。调用"__WFI()"函数,退出方式为任意中断。调用"__WFE()"函数,退出方式为唤醒事件。2.停......
  • 关于征集参与《智慧能源服务评价技术要求》团体标准起草单位的通知
    根据2023年团体标准管理制修订计划安排,为使标准更具专业性、实用性和可操作性,吸纳行业内有代表性的骨干企业和专家作为起草单位和起草人,现就我单位牵头申报的《智慧能源服务评价技术要求》团体标准公开征集起草单位和起草人。一、申请标准起草单位的机构必须具备以下条......
  • python得scrapy提取数据 xpath注意事项
    在提取器过滤数据这个地方被坑了很久,确实有点坑,有点难以理解,多注意下就可以了。frommultiprocessingimportallow_connection_picklingfromscrapy.spidersimportSpiderfrom..itemsimportCnblogshaha01ItemclasscnblogSpider(Spider):name="cnblogsHAHA01"#定......
  • UVM宏解释+odt文件转doc+merge命令和difflib+python调用命令+clog2和系统函数+java添
    UVM宏解释UVM_DISABLE_AUTO_ITEM_RECORDINGhttps://blog.csdn.net/MGoop/article/details/127295965itemrecord的方法主要是用于记录事务信息的,原理是调用accept_tr,begin_tr,end_tr。似乎和波形上显示出各个事务相关。默认情况下,在调用get_next_item()和item_done()时自动......