如何使用python仅获取路径的名称?

如何使用python仅获取路径的名称?,python,Python,我有以下字符串: a = "/home/user/Downloads/repo/test.txt" 我的目标只是创建一个只包含test的字符串,我可以这样做吗 实际上,a来自 f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt") a等于a=f.name 但是我意识到,f.name并没有给我文件的名称;提供最后一个路径分隔符后的最后一部分,并提供扩展名为拆分的文件名: import os.path basename

我有以下字符串:

a = "/home/user/Downloads/repo/test.txt"
我的目标只是创建一个只包含
test
的字符串,我可以这样做吗

实际上,a来自

f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt")
a等于
a=f.name

但是我意识到,
f.name
并没有给我文件的名称;提供最后一个路径分隔符后的最后一部分,并提供扩展名为拆分的文件名:

import os.path

basename = os.path.splitext(os.path.basename(f.name))[0]
使用
os.path
函数可以确保代码在不同的操作系统上继续正常工作,即使路径分隔符不同

在Python3.4或更高版本(或作为一个应用程序)中,还可以使用,它提供了一种更面向对象的路径处理方法
pathlib.Path()
对象有一个,这是没有扩展后缀的最后一个组件:

try:
    import pathlib
except ImportError:
    # older Python version, import the backport instead
    import pathlib2 as pathlib

basename = pathlib.Path(f.name).stem
演示:


在Python 3.4+中,您可以使用模块(包含在Python的标准库中):


您可能正在查找
os.path.basename
os.path.splitext

>>> import os.path
>>> os.path.basename("/var/log/err.log")
'err.log'
>>> os.path.splitext(os.path.basename("/var/log/err.log"))
('err', '.log')
>>> os.path.splitext(os.path.basename("/var/log/err.log"))[0]
'err'
>>>

为了清楚起见,您希望最后一部分没有扩展名吗?提示:查看模块
os.path
os.path.splitext(os.path.basename(a))[0]
忽略python 2.x关于2009年问题的所有旧答案。使用pathlib。有没有办法获取茎及其延伸部分?编辑:在文档中查看,答案是
p.name
如果存在多个扩展名(例如test.original.txt),则无法使用。对于其他正在查找的用户:您可以通过以下方式获取父目录:
p.parent
和后缀(扩展名)
p.suffix
>>> from pathlib import Path
>>> p = Path("/home/user/Downloads/repo/test.txt")
>>> print(p.stem)
test
>>> print(p.name)
test.txt
>>> import os.path
>>> os.path.basename("/var/log/err.log")
'err.log'
>>> os.path.splitext(os.path.basename("/var/log/err.log"))
('err', '.log')
>>> os.path.splitext(os.path.basename("/var/log/err.log"))[0]
'err'
>>>