Geo*_*Geo 1193
获取没有扩展名的文件名称:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Run Code Online (Sandbox Code Playgroud)
gim*_*mel 456
滚动吧:
>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'
Run Code Online (Sandbox Code Playgroud)
小智 206
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
Run Code Online (Sandbox Code Playgroud)
bol*_*old 183
可读版本,pathlib
在Python 3.4+中使用
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
Run Code Online (Sandbox Code Playgroud)
将打印:
文件
如果路径可以是符号链接,则添加pathlib
file
Run Code Online (Sandbox Code Playgroud)
Mor*_*oth 57
为了完整起见,这里是pathlib
python 3.2+ 的解决方案:
from pathlib import Path
print(Path(your_path).resolve().stem)
Run Code Online (Sandbox Code Playgroud)
小智 24
如果要保留文件的路径,只需删除扩展名
>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
Run Code Online (Sandbox Code Playgroud)
jji*_*now 21
https://docs.python.org/3/library/os.path.html
在python 3中,pathlib"pathlib模块提供了高级路径对象." 所以,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
Run Code Online (Sandbox Code Playgroud)
Dhe*_*thi 19
如果扩展中有多个点,则os.path.splitext()将不起作用.
例如,images.tar.gz
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar
Run Code Online (Sandbox Code Playgroud)
您可以在基本名称中找到第一个点的索引,然后将基本名称切片以仅获取没有扩展名的文件名.
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images
Run Code Online (Sandbox Code Playgroud)
Ala*_*ith 15
其他方法不会删除多个扩展名。有些还存在文件名没有扩展名的问题。这个片段处理这两个实例并且在 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
Run Code Online (Sandbox Code Playgroud)
下面是一组要运行的示例:
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))
Run Code Online (Sandbox Code Playgroud)
在每种情况下,打印的值是:
FileName
Run Code Online (Sandbox Code Playgroud)
dli*_*ink 12
@ IceAdor在评论@ user2902201的解决方案中引用了rsplit.rsplit是支持多个句点的最简单的解决方案.
这里拼写出来:
file = 'my.report.txt'
print file.rsplit('.', 1)[0]
Run Code Online (Sandbox Code Playgroud)
我的报告
Dev*_*rre 11
但即使我导入操作系统,我也无法将其命名为path.basename.是否可以直接将其称为基本名称?
import os
,然后使用 os.path.basename
import
ing os
并不意味着你可以在os.foo
不参考的情况下使用os
.
Sco*_*McC 11
我以为我会在os.path.splitext中使用一个变体,而不需要使用数组索引.
该函数始终返回一(root, ext)
对,因此可以安全使用:
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'
Run Code Online (Sandbox Code Playgroud)
正如其他 Pathlib 答案的评论中所述,处理多个后缀可能很尴尬。使用.with_suffix('')
和处理两个或更少的后缀并不是那么糟糕.stem
。
from pathlib import Path
pth = Path('foo/bar/baz.baz/thefile.tar.gz')
fn = pth.with_suffix('').stem
print(fn) # thefile
Run Code Online (Sandbox Code Playgroud)
如果可能有两个以上的扩展名,您可以使用循环来处理可能有 0、1 或许多后缀的一般情况。
pth = Path('foo/bar/baz/thefile.tar.gz.bz.7zip')
pth.name # 'thefile.tar.gz.bz.7zip'
pth.suffixes # ['.tar', '.gz', '.bz', '.7zip']
Run Code Online (Sandbox Code Playgroud)
所以
fn = pth.name
for s in pth.suffixes:
fn = fn.rsplit(s)[0]
print(fn) # thefile
Run Code Online (Sandbox Code Playgroud)
或者
fnp = Path(pth.name)
for _ in fnp.suffixes:
fnp = fnp.with_suffix('')
print(fnp) # thefile
Run Code Online (Sandbox Code Playgroud)
注意这里fnp
是路径,fn
而是字符串,这可以决定首选的循环形式。
举例来说,如果扩展可能是.tar
,.tar.gz
,.tar.gz.bz
等; 您可以简单地rsplit
使用已知扩展名并获取第一个元素:
pth = Path('foo/bar/baz.baz/thefile.tar.gz')
fn = pth.name.rsplit('.tar')[0]
print(fn) # thefile
Run Code Online (Sandbox Code Playgroud)
小智 7
import os
filename, file_extension =os.path.splitext(os.path.basename('/d1/d2/example.cs'))
Run Code Online (Sandbox Code Playgroud)
文件名是“示例”
file_extension 是“.cs”
'
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
Run Code Online (Sandbox Code Playgroud)
这将返回filename
没有extension
(C:\Users\Public\Videos\Sample Videos\wildlife)
temp = os.path.splitext(filename)[0]
Run Code Online (Sandbox Code Playgroud)
现在你可以filename
从 temp 中获得
os.path.basename(temp) #this returns just the filename (wildlife)
Run Code Online (Sandbox Code Playgroud)
小智 5
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
Run Code Online (Sandbox Code Playgroud)
小智 5
多扩展感知过程。适用于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)
Run Code Online (Sandbox Code Playgroud)
行为:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
非常非常非常简单,没有其他模块!!!
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)
Run Code Online (Sandbox Code Playgroud)