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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Python中的路径获取没有扩展名的文件名?相关的知识,希望对你有一定的参考价值。

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

答案

获取没有扩展名的文件名称:

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

打印:

/path/to/some/file

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

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

打印:

/path/to/some/file.txt.zip
另一答案

@ IceAdor在评论@ user2902201的解决方案中引用了rsplit。 rsplit是支持多个句点的最简单的解决方案。

这里拼写出来:

file = 'my.report.txt'
print file.rsplit('.', 1)[0]

没有.report

另一答案

以为我会抛出使用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'
另一答案

import os

filename = C:\Users\Public\Videos\Sample Videos\wildlife.wmv

这将返回没有filenameextension(C: Users Public Videos Sample Videos wildlife)

temp = os.path.splitext(filename)[0]  

现在你可以从温度中获得filename

os.path.basename(temp)   #this returns just the filename (wildlife)
另一答案

多扩展感知过程。适用于strunicode路径。适用于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'
另一答案

在Windows系统上我也使用了drivername前缀,例如:

>>> s = 'c:\temp\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:	empakarmi

因为我不需要驱动器号或目录名,我使用:

>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
另一答案
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
另一答案

我们可以做一些简单的split / pop魔法(如https://stackoverflow.com/a/424006/1250044),提取文件名(尊重windows和POSIX差异)。

def getFileNameWithoutExtension(path):
  return path.split('\').pop().split('/').pop().rsplit('.', 1)[0]

getFileNameWithoutExtension('/path/to/file-0.0.1.ext')
# => file-0.0.1

getFileNameWithoutExtension('\path\to\file-0.0.1.ext')
# => file-0.0.1
另一答案
import os
list = []
def getFileName( path ):
for file in os.listdir(path):
    #print file
    try:
        base=os.path.basename(file)
        splitbase=os.path.splitext(base)
        ext = os.path.splitext(base)[1]
        if(ext):
            list.append(base)
        else:
            newpath = path+"/"+file
            #print path
            getFileName(newpath)
    except:
        pass
return list

getFileName("/home/weexcel-java3/Desktop/backup")
print list
另一答案

解决这个问题的最简单方法是

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

这可以节省您的时间和计算成本。

另一答案

最大的esoterica:

def strip_suffix(filename):
    """
    >>> video.mp4
    video

    >>> video.extra.mp4
    video.extra
    """
    return ''.join((name_dot[0] + name_dot[1] for name_dot in itertools.zip_longest(filename.split('.')[0:-1], '.', fillvalue='.')))[0:-1]

注意:这只是为了好玩。不要使用它。请改用os.path.splitext

另一答案

滚动吧:

>>> 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'
另一答案

其他方法不会删除多个扩展名。有些文件名也没有扩展名。这个片段处理两个实例并在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
另一答案

为方便起见,一个简单的函数包装来自os.path的两个方法:

def filename(path):
  """Return file name without extension from path.

  See https://docs.python.org/3/library/os.path.html
  """
  import os.path
  b = os.path.split(path)[1]  # path, *filename*
  f = os.path.splitext(b)[0]  # *file*, ext
  #print(path, b, f)
  return f

用Python 3.5测试。

另一答案
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
另一答案

一个可读的版本,在Python 3.4+中使用Pathlib

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

将打印:

文件

另一答案

为了完整起见,这里是python 3.2+的pathlib解决方案:

from pathlib import Path

print(Path(your_path).resolve().stem)
另一答案

如果要保留文件的路径,只需删除扩展名

>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
另一答案

如果扩展中有多个点,则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

您可以在基本名称中找到第一个点的索引,然后将基本

以上是关于如何从Python中的路径获取没有扩展名的文件名?的主要内容,如果未能解决你的问题,请参考以下文章

Java - 如何从绝对路径中获取文件名并删除其文件扩展名?

如何从 Python 中的文件路径中提取文件夹路径?

CFileDialog 如何获取文件夹路径

POSIX 或 Linux API 函数从路径获取文件扩展名

使用 PHP 从 URL 字符串中获取文件路径/扩展名 [重复]

关于python3中文件名里的反斜杠问题,不需要转义吗?