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

标签 python regex string tkinter filenames

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

我目前可以使用 askopenfilename() 获取 .csv 文件的文件路径,它返回一个类似于 "User/Folder1/.../filename.csv"的字符串。我需要某种方法从这个文件路径字符串中提取 "filename" ,但我有点不知道如何做到这一点。这只是一个正则表达式问题吗?或者有没有办法使用字符串索引来做到这一点?哪种方法是“更好”的呢?任何帮助都会很棒。谢谢。

编辑:我想知道正则表达式是否是正确的方法的原因是因为可能存在重复项,例如如果用户有类似于“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)

现在,此命令将完整的文件路径+名称字符串拆分为两部分:

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

关于python - 我应该使用正则表达式来获取文件名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663950/

相关文章:

javascript - 特定电话号码排列的正则表达式

regex - 替换为保留部分模式的正则表达式

ruby - 按特定条件分割的字符串

ruby - 通过第一次出现非字母字符来打破字符串?

python - 定位距目标字符串 N 字符长距离最小的 "N Gram"个子字符串

python - 是否有任何命令可以使用 kaggle API 从 Kaggle Competition 的特定文件夹下载数据

python - 不确定如何在循环中使用列表理解

javascript - 如果文本中存在大写字母或数字,则测试返回 false

python - 如何使用 selenium 和 python 创建具有相同 xpath 的元素列表?

python - 为什么我不能在 pandas 中将列分成两列?