我目前正在 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/