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

问题描述 投票:0回答:7

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

abc.def.gh.bz2

bz2 是真正的扩展名,我需要获取 abc.def.gh

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

非常感谢。

python string
7个回答
8
投票

使用

os.path.splitext

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

3
投票

这个使用

rsplit()

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

3
投票

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

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

2
投票
  • .rfind()
    找到最后一个点。

例如

"abc.def.gh.bz2".rfind(".")
会找到最后一个点的索引

该索引下方的任何点通常*不会是文件类型的指示符。因此,您可以执行例如

filename = "abc.def.gh.bz2"[:"abc.def.gh.bz2".rfind(".")]
,它应该去掉扩展名,使文件名成为
abc.def.gh

的字符串

*不过,请记住,在某些情况下,例如 tar.gzgh.bz2 也许应该算作文件扩展名。所以请记住,

what is a filename
是一个相当短暂的主题

使用

import os.path.splitext
根本不能保证获得“文件名”。它要做的就是从传递给它的字符串中切出 . 扩展名


0
投票

输出删除了点。

a = "abc.def.gh.bz2"
parts = a.split(".")
result = ""
sep = ""
for i in range(len(parts)-1):
    result = result + sep + parts[i]
    sep = "."

打印结果


0
投票

您可以利用

pathlib
模块:

from pathlib import Path
Path('abc.def.gh.bz2').stem

-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
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.