Skip to main content
 首页 » 编程设计

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

2024年09月07日44kevingrace

我目前正在使用 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。 string 类型的 splitext 参数。因此,在我们的第一个场景中,我们使用:

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