如何在Python中从路径中获取没有扩展名的文件名?
"/path/to/some/file.txt" → "file"
import os
filename, file_extension =os.path.splitext(os.path.basename('/d1/d2/example.cs'))
文件名为'example'
文件扩展名为'.cs'
'
'import os
,然后使用 os.path.basename
。os
并不意味着你可以在不引用 os
的情况下使用 os.foo
。from os import foo
。 - tgrayos
模块有一个叫做 foo
的成员,那么它的版本非常不标准。 - Tadhg McDonald-Jensen我想提供一种使用os.path.splitext的变化,无需使用数组索引。
该函数始终返回一个(根目录, 扩展名)
对,因此可以安全使用:
root, ext = os.path.splitext(path)
例如:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
其他方法不能删除多个扩展名。有些方法也无法处理没有扩展名的文件名。这段代码可以同时解决这两种情况,并且可用于Python 2和3。它从路径中获取基本名称,将值按点号分割,并返回第一个值,即文件名的初始部分。
import os
def get_filename_without_extension(file_path):
file_basename = os.path.basename(file_path)
filename_without_extension = file_basename.split('.')[0]
return filename_without_extension
这里是一组可供执行的例子:
example_paths = [
"FileName",
"./FileName",
"../../FileName",
"FileName.txt",
"./FileName.txt.zip.asc",
"/path/to/some/FileName",
"/path/to/some/FileName.txt",
"/path/to/some/FileName.txt.zip.asc"
]
for example_path in example_paths:
print(get_filename_without_extension(example_path))
在每种情况下,打印的值都是:
FileName
Path('/path/to/file.txt').stem
快得多。(1.23微秒对比8.39微秒) - raratiru一个支持多扩展名的过程。适用于 str
和 unicode
路径。在 Python 2 和 3 中均可使用。
import os
def file_base_name(file_name):
if '.' in file_name:
separator_index = file_name.index('.')
base_name = file_name[:separator_index]
return base_name
else:
return file_name
def path_base_name(path):
file_name = os.path.basename(path)
return file_base_name(file_name)
行为:
>>> path_base_name('file')
'file'
>>> path_base_name(u'file')
u'file'
>>> path_base_name('file.txt')
'file'
>>> path_base_name(u'file.txt')
u'file'
>>> path_base_name('file.tar.gz')
'file'
>>> path_base_name('file.a.b.c.d.e.f.g')
'file'
>>> path_base_name('relative/path/file.ext')
'file'
>>> path_base_name('/absolute/path/file.ext')
'file'
>>> path_base_name('Relative\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('C:\\Absolute\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('/path with spaces/file.ext')
'file'
>>> path_base_name('C:\\Windows Path With Spaces\\file.txt')
'file'
>>> path_base_name('some/path/file name with spaces.tar.gz.zip.rar.7z')
'file name with spaces'
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
非常简单,没有其他模块!!!
import os
p = r"C:\Users\bilal\Documents\face Recognition python\imgs\northon.jpg"
# Get the filename only from the initial file path.
filename = os.path.basename(p)
# Use splitext() to get filename and extension separately.
(file, ext) = os.path.splitext(filename)
# Print outcome.
print("Filename without extension =", file)
print("Extension =", ext)
导入 os 模块
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
这将返回不带扩展名的文件名
(C:\Users\Public\Videos\Sample Videos\wildlife)
temp = os.path.splitext(filename)[0]
文件名
:os.path.basename(temp) #this returns just the filename (wildlife)
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]:
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
from pathlib import Path; print(Path("/path/to/some/file.txt").stem)
>>>file
。 - BallpointBenimport os; filepath='./readme'; dir, filename_ext = os.path.split(filepath); filename=filename_ext.rsplit('.', maxsplit=1)[0]; print(f'{dir}/{filename}') ./readme
- dlink