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

How to get only the name of the path with python?

本问题已经有最佳答案,请猛点这里访问。

我有以下字符串:

1
a ="/home/user/Downloads/repo/test.txt"

我的目标只是创建一个只包含test的字符串,我能这样做吗?

实际上a来自

1
f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt")

a等于a = f.name

但我意识到f.name并没有给我文件名。


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

1
2
3
from pathlib import Path
p = Path("/home/user/Downloads/repo/test.txt")
print(p.stem)


似乎您正在寻找os.path.basenameos.path.splitext

1
2
3
4
5
6
7
8
>>> 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.basename()函数给出最后一个路径分隔符后的最后一部分,os.path.splitext()给出扩展名为split off的文件名:

1
2
3
import os.path

basename = os.path.splitext(os.path.basename(f.name))[0]

使用os.path函数可以确保代码在不同的操作系统上继续正常工作,即使路径分隔符不同。

在Python3.4或更高版本(或作为单独的后端安装)中,您还可以使用pathlib库,它提供了一种更面向对象的路径处理方法。pathlib.Path()对象有一个.stem属性,它是最后一个没有扩展后缀的组件:

1
2
3
4
5
6
7
try:
    import pathlib
except ImportError:
    # older Python version, import the backport instead
    import pathlib2 as pathlib

basename = pathlib.Path(f.name).stem

演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> import os.path
>>> a ="/home/user/Downloads/repo/test.txt"
>>> os.path.basename(a)
'test.txt'
>>> os.path.splitext(os.path.basename(a))
('test', '.txt')
>>> os.path.splitext(os.path.basename(a))[0]
'test'
>>> import pathlib
>>> pathlib.Path(a)
PosixPath('/home/user/Downloads/repo/test.txt')
>>> pathlib.Path(a).stem
'test'