在python中获取包含多个点的文件名的优雅方法是什么?

时间:2018-04-19 17:36:36

标签: python string

我需要处理名称中包含多个部分的linux文件:

abc.def.gh.bz2

bz2是真正的扩展,我需要得到abc.def.gh

有谁能告诉我在python中执行此操作的优雅方法?

非常感谢。

5 个答案:

答案 0 :(得分:2)

使用os.path.splitext

import os.path
os.path.splitext("abc.def.gh.bz2") # -> ("abc.def.gh", ".bz2")

答案 1 :(得分:2)

os.path.splitext正是你想要的。它返回一个带文件名和扩展名的元组。使用[0]获取文件名。

>>> import os
>>> os.path.splitext('abc.def.gh.bz2')[0]
'abc.def.gh'

答案 2 :(得分:1)

  • .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并不能保证获得"文件名"。它所要做的就是从传递给它的字符串中切出扩展名

答案 3 :(得分:1)

这个使用rsplit()

s = "abc.def.gh.bz2"
print(s.rsplit('.', 1)[0])
# abc.def.gh

答案 4 :(得分:-2)

您需要的只是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