如何从Python中的路径获取不带扩展名的文件名?

"/path/to/some/file.txt"  →  "file"

当前回答

使用pathlib.Path.stem是正确的方法,但这里有一个丑陋的解决方案,它比基于pathlib的方法更有效。

您有一个文件路径,其字段由正斜杠/分隔,斜杠不能出现在文件名中,因此您将文件路径拆分为/,最后一个字段是文件名。

扩展名始终是通过按点分割文件名创建的列表的最后一个元素。,因此,如果反转文件名并按点拆分一次,则第二个元素的反转是不带扩展名的文件名。

name = path.split('/')[-1][::-1].split('.', 1)[1][::-1]

性能:

Python 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.28.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from pathlib import Path

In [2]: file = 'D:/ffmpeg/ffmpeg.exe'

In [3]: Path(file).stem
Out[3]: 'ffmpeg'

In [4]: file.split('/')[-1][::-1].split('.', 1)[1][::-1]
Out[4]: 'ffmpeg'

In [5]: %timeit Path(file).stem
6.15 µs ± 433 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [6]: %timeit file.split('/')[-1][::-1].split('.', 1)[1][::-1]
671 ns ± 37.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [7]:

其他回答

获取不带扩展名的文件名:

import os
print(os.path.splitext("/path/to/some/file.txt")[0])

打印:

/path/to/some/file

os.path.splitext文档。

重要提示:如果文件名有多个点,则只删除最后一个点之后的扩展名。例如:

import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])

打印:

/path/to/some/file.txt.zip

如果您需要处理该案例,请参阅下面的其他答案。

>>>print(os.path.splitext(os.paath.basename(“/path/to/file/vrun.txt”))[0])varun

这里/path/to/file/vrun.txt是文件的路径,输出为varun

import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
import os
filename, file_extension =os.path.splitext(os.path.basename('/d1/d2/example.cs'))

文件名为“example”文件扩展名为“.cs”

'

解决此问题的最简单方法是

import ntpath 
print('Base name is ',ntpath.basename('/path/to/the/file/'))

这节省了时间和计算成本。