【发布时间】:2019-04-30 12:44:53
【问题描述】:
我有一个文件夹,其中包含多个具有双扩展名 ".nii.gz" 的文件。我想使用os.path.basename 提取文件名,但此函数仅返回带有第一个扩展名“.nii” 的文件名。如何提取具有两个扩展名的完整文件名?
【问题讨论】:
标签: python filepath os.path dirname
我有一个文件夹,其中包含多个具有双扩展名 ".nii.gz" 的文件。我想使用os.path.basename 提取文件名,但此函数仅返回带有第一个扩展名“.nii” 的文件名。如何提取具有两个扩展名的完整文件名?
【问题讨论】:
标签: python filepath os.path dirname
为什么不使用好旧的str.split
filename = 'file.nil.gz'
li = filename.split('.')
basename = li[0]
extensions = li[1:]
print(basename)
#file
print(extensions)
#['nil', 'gz']
【讨论】:
我认为,最佳做法是使用pathlib 进行文件路径操作。
代码:
from pathlib import Path
print(Path("C://filename.tar.gz").suffixes)
结果:
['.tar', '.gz']
要将所有后缀提取到一个字符串中,只需将它们连接起来:
print("".join(Path("C://filename.tar.gz").suffixes))
【讨论】:
此函数提取整个名称,即使有多个“.”:
from os import listdir
from os.path import isfile, join
mypath = 'blabla'
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
print(onlyfiles)
如果你不想看到扩展,那么这里是附加组件:
onlyfiles = [f.split('.')[0] for f in listdir(mypath) if isfile(join(mypath, f))]
print(onlyfiles)
【讨论】: