我需要处理名称中包含多个部分的linux文件,例如:
abc.def.gh.bz2
bz2 是真正的扩展名,我需要获取 abc.def.gh
谁能告诉我一种在 python 中执行此操作的优雅方法?
非常感谢。
使用
os.path.splitext
:
import os.path
os.path.splitext("abc.def.gh.bz2") # -> ("abc.def.gh", ".bz2")
os.path.splitext
正是您想要的。它返回一个包含文件名和扩展名的元组。使用 [0]
即可获取文件名。
>>> import os
>>> os.path.splitext('abc.def.gh.bz2')[0]
'abc.def.gh'
.rfind()
找到最后一个点。例如
"abc.def.gh.bz2".rfind(".")
会找到最后一个点的索引
该索引下方的任何点通常*不会是文件类型的指示符。因此,您可以执行例如
filename = "abc.def.gh.bz2"[:"abc.def.gh.bz2".rfind(".")]
,它应该去掉扩展名,使文件名成为 abc.def.gh
的字符串
*不过,请记住,在某些情况下,例如 tar.gz 或 gh.bz2 也许应该算作文件扩展名。所以请记住,
what is a filename
是一个相当短暂的主题
使用
import os.path.splitext
根本不能保证获得“文件名”。它要做的就是从传递给它的字符串中切出 . 扩展名
输出删除了点。
a = "abc.def.gh.bz2"
parts = a.split(".")
result = ""
sep = ""
for i in range(len(parts)-1):
result = result + sep + parts[i]
sep = "."
打印结果
您可以利用
pathlib
模块:
from pathlib import Path
Path('abc.def.gh.bz2').stem
您所需要的只是
split
功能。
a = "abc.def.gh.bz2"
print a.split(".")
所以您需要的完整解决方案是
a = "abc.def.gh.bz2"
parts = a.split(".")
result = ""
for i in range(len(parts)-1):
result += parts[i]
print result