>>> x = 'file/path/archive.tar.gz'
>>> y = 'file/path/text.txt'
>>> ''.join(pathlib.Path(x).suffixes)
'.tar.gz'
>>> ''.join(pathlib.Path(y).suffixes)
'.txt'
327
感到惊讶的是还没有提到:
import os
fn = '/some/path/a.tar.gz'
basename = os.path.basename(fn) # os independent
Out[] a.tar.gz
base = basename.split('.')[0]
Out[] a
ext = '.'.join(basename.split('.')[1:]) # <-- main part
# if you want a leading '.', and if no result `None`:
ext = '.' + ext if ext else None
Out[] .tar.gz
优点:
按照预期工作,我能想到的任何事情
没有模块
没有正则表达式
跨平台
易于扩展(例如,没有扩展的前导点,只有扩展的最后部分)
作为功能:
def get_extension(filename):
basename = os.path.basename(filename) # os independent
ext = '.'.join(basename.split('.')[1:])
return '.' + ext if ext else None
13
name_only=file_name[:filename.index(".")
这将为您提供第一个“ . ”的文件名,这将是最常见的 .
6
您可以在 filename 上使用 split :
f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))
这不需要额外的库
2
# try this, it works for anything, any length of extension
# e.g www.google.com/downloads/file1.gz.rs -> .gz.rs
import os.path
class LinkChecker:
@staticmethod
def get_link_extension(link: str)->str:
if link is None or link == "":
return ""
else:
paths = os.path.splitext(link)
ext = paths[1]
new_link = paths[0]
if ext != "":
return LinkChecker.get_link_extension(new_link) + ext
else:
return ""
# to get extension only
s = 'test.ext'
if '.' in s: ext = s.rsplit('.', 1)[1]
# or, to get file name and extension
def split_filepath(s):
"""
get filename and extension from filepath
filepath -> (filename, extension)
"""
if not '.' in s: return (s, '')
r = s.rsplit('.', 1)
return (r[0], r[1])
20 回答
是 . 使用
os.path.splitext
(参见Python 2.X documentation或Python 3.X documentation):与大多数手动字符串拆分尝试不同,
os.path.splitext
会正确地将/a/b.c/d
视为没有扩展名而不是扩展名.c/d
,并且它会将.bashrc
视为没有扩展名而不是扩展名.bashrc
:一个选项可能是从点分割:
文件没有扩展名时没有错误:
但你必须小心:
值得在那里添加一个较低的,所以你不会发现自己想知道为什么JPG没有出现在你的列表中 .
这是一种直接的字符串表示技术:我看到了很多提到的解决方案,但我认为大多数都在考虑拆分 . 然而拆分在每次出现“ . ”时都会发生 . . 你宁愿寻找的是分区 .
使用splitext时,双扩展文件存在问题(例如
file.tar.gz
,file.tar.bz2
等)但应该是:
.tar.gz
可能的解决方案是here
虽然这是一个古老的话题,但我想知道为什么在这种情况下没有提到一个名为rpartition的非常简单的pyi api:
要获得给定文件绝对路径的扩展,您只需键入:
例:
会给你:'csv'
你可以在pathlib模块中找到一些很棒的东西 .
即使这个问题已经回答,我也会在Regex中添加解决方案 .
仅获取扩展名的文本,不带点 .
版本3.4中的新功能 .
我很惊讶没有人提到pathlib,
pathlib
太棒了!如果您需要所有后缀(例如,如果您有
.tar.gz
),.suffixes
将返回它们的列表!上面的任何解决方案都可以工作,但是在linux上我发现扩展字符串末尾有一个换行符会阻止匹配成功 . 将
strip()
方法添加到最后 . 例如:只是
join
全部pathlib suffixes
.感到惊讶的是还没有提到:
优点:
按照预期工作,我能想到的任何事情
没有模块
没有正则表达式
跨平台
易于扩展(例如,没有扩展的前导点,只有扩展的最后部分)
作为功能:
这将为您提供第一个“ . ”的文件名,这将是最常见的 .
您可以在
filename
上使用split
:这不需要额外的库
右分裂的另一种解决方案: