我应该使用正则表达式来获取文件名吗?
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
我目前正在 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