我应该使用正则表达式来获取文件名吗?

Should I Use Regex to Get a File Name?

我目前正在 Python(初学者)中使用 tkinter,我正在编写一个小程序,它需要其中一个标签根据标签的名称动态更改选定的 .csv 文件没有“.csv”标签。

我目前可以使用 askopenfilename() 获取 .csv 文件的文件路径,其中 returns 是一个类似于 "User/Folder1/.../filename.csv" 的字符串。我需要一些方法从这个文件路径字符串中提取 "filename",但我对如何做有点困惑。这只是一个正则表达式问题吗?或者有没有办法使用字符串索引来做到这一点? "better" 的方法是什么?任何帮助都会很棒。谢谢。

编辑:我想知道正则表达式是否是正确的方法的原因是因为可能存在重复,例如如果用户有类似 "User/Folder1/hello/hello.csv" 的东西。这就是为什么我想也许只使用字符串索引,因为我需要的文件名总是以 [:-4] 结尾。我的思考方式正确吗?

解法:

import os
file = open('/some/path/to/a/test.csv')
fname = os.path.splitext(str(file))[0].split('/')[-1]
print(fname)

# test

如果你得到文件路径和名称作为字符串,那么:

import os
file = "User/Folder1/test/filename.csv"
fname = os.path.splitext(file)[0].split('/')[-1]
print(fname)

# filename

解释它是如何工作的:

注意命令是 os.path.splitEXT,而不是 os.path.splitTEXT - 很常见的错误。

该命令接受string类型的参数,所以如果我们使用file = open(...),那么我们需要传递os.path.splitext类型string的参数。因此,在我们的第一个场景中,我们使用:

str(file)

现在,此命令将完整的 file path + name 字符串分成两部分:

os.path.splitext(str(file))

# result:
['/some/path/to/a/test','csv']

在我们的例子中,我们只需要第一部分,所以我们通过指定列表索引来获取它:

os.path.splitext(str(file))[0]

# result: 
'/some/path/to/a/test'

现在,由于我们只需要文件名而不是整个路径,我们将其拆分为 /:

os.path.splitext(str(file))[0].split('/')

# result:
['some','path','to','a','test']

除此之外我们只需要最后一个元素,或者换句话说,从末尾开始:

os.path.splitext(str(file)[0].split('/')[-1]

希望这对您有所帮助。

在此处查看更多信息:Extract file name from path, no matter what the os/path format