从文件名中删除路径

时间:2015-12-30 10:29:41

标签: go

我有一些微不足道的问题。

我有一个包含文件名及其路径的字符串。我怎样才能删除整条路径?我试过那些:

line = "/some/path/to/remove/file.name"
line := strings.LastIndex(line, "/")
fmt.Println(line)

打印出一些奇怪的数字:

38

我需要它而没有最后的斜杠

非常感谢

4 个答案:

答案 0 :(得分:44)

该数字是字符串中最后一个斜杠的索引。如果您想获取文件的基本名称,请使用filepath.Base

path := "/some/path/to/remove/file.name"
file := filepath.Base(path)
fmt.Println(file)

游乐场:http://play.golang.org/p/DzlCV-HC-r

答案 1 :(得分:4)

你可以尝试一下!

dir, file := filepath.Split("/some/path/to/remove/file.name")
fmt.Println("Dir:", dir)   //Dir: /some/path/to/remove/
fmt.Println("File:", file) //File: ile.name

答案 2 :(得分:1)

另一种选择:

package main
import "path"

func main() {
   line := "/some/path/to/remove/file.name"
   line = path.Base(line)
   println(line == "file.name")
}

https://golang.org/pkg/path#Base

答案 3 :(得分:0)

如果您希望基本路径不包含fileName,则可以使用Dir,该文件记录在这里:https://golang.org/pkg/path/filepath/#Dir

引用其文档的一部分:

  

Dir返回除路径的最后一个元素以外的所有元素,通常是路径的目录。删除最后一个元素后,Dir会在路径上调用Clean并删除斜杠。

也从他们的文档中运行以下代码:

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    fmt.Println("On Unix:")
    fmt.Println(filepath.Dir("/foo/bar/baz.js"))
    fmt.Println(filepath.Dir("/foo/bar/baz"))
    fmt.Println(filepath.Dir("/foo/bar/baz/"))
    fmt.Println(filepath.Dir("/dirty//path///"))
    fmt.Println(filepath.Dir("dev.txt"))
    fmt.Println(filepath.Dir("../todo.txt"))
    fmt.Println(filepath.Dir(".."))
    fmt.Println(filepath.Dir("."))
    fmt.Println(filepath.Dir("/"))
    fmt.Println(filepath.Dir(""))

}

将为您提供以下输出:

  

在Unix上:   / foo / bar   / foo / bar   / foo / bar / baz   /脏/路径   。   ..   。   。   /   

在这里自己尝试:

https://play.golang.org/p/huk3EmORFw5

如果您想获取不带基本路径的fileName,则@ Ainar-G已经足够回答了这一点。