是否有从文件名中提取扩展名的功能?
是.使用os.path.splitext
(参见Python 2.X文档或Python 3.X文档):
>>> import os >>> filename, file_extension = os.path.splitext('/path/to/somefile.ext') >>> filename '/path/to/somefile' >>> file_extension '.ext'
与大多数手动字符串拆分尝试不同,os.path.splitext
将正确地/a/b.c/d
视为没有扩展而不是扩展.c/d
,并且它将被.bashrc
视为没有扩展而不是扩展.bashrc
:
>>> os.path.splitext('/a/b.c/d') ('/a/b.c/d', '') >>> os.path.splitext('.bashrc') ('.bashrc', '')
import os.path extension = os.path.splitext(filename)[1]
版本3.4中的新功能.
import pathlib print(pathlib.Path('yourPathGoesHere').suffix)
我很惊讶没有人提到过pathlib
,pathlib
太棒了!
如果您需要所有后缀(例如,如果您有.tar.gz
),.suffixes
将返回它们的列表!
import os.path extension = os.path.splitext(filename)[1][1:]
仅获取扩展名的文本,不带点.
一个选项可能是从点分割:
>>> filename = "example.jpeg" >>> filename.split(".")[-1] 'jpeg'
文件没有扩展名时没有错误:
>>> "filename".split(".")[-1] 'filename'
但你必须小心:
>>> "png".split(".")[-1] 'png' # But file doesn't have an extension
值得在那里添加一个较低的,所以你不会发现自己想知道为什么JPG没有出现在你的列表中.
os.path.splitext(filename)[1][1:].strip().lower()
上面的任何解决方案都有效,但是在Linux上我发现扩展字符串末尾有一个换行符会阻止匹配成功.将strip()
方法添加到最后.例如:
import os.path extension = os.path.splitext(filename)[1][1:].strip()
随着splitext有与双扩展名的文件的问题(例如file.tar.gz
,file.tar.bz2
等..)
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz') >>> fileExtension '.gz'
但应该是: .tar.gz
可能的解决方案在这里
虽然这是一个古老的话题,但我想知道为什么在这种情况下没有提到一个叫做rpartition的非常简单的pyi api:
要获得给定文件绝对路径的扩展,您只需键入:
filepath.rpartition('.')[-1]
例:
path = '/home/jersey/remote/data/test.csv' print path.rpartition('.')[-1]
会给你:'csv'
感到惊讶的是还没有提到:
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
filename='ext.tar.gz' extension = filename[filename.rfind('.'):]
你可以在pathlib模块中找到一些很棒的东西.
import pathlib x = pathlib.PurePosixPath("C:\\Path\\To\\File\\myfile.txt").suffix print(x) # Output '.txt'
只是join
全部pathlib suffixes
。
>>> x = 'file/path/archive.tar.gz' >>> y = 'file/path/text.txt' >>> ''.join(pathlib.Path(x).suffixes) '.tar.gz' >>> ''.join(pathlib.Path(y).suffixes) '.txt'
您可以在split
上使用filename
:
f_extns = filename.split(".") print ("The extension of the file is : " + repr(f_extns[-1]))
这不需要额外的库
这是一种直接的字符串表示技术:我看到了很多解决方案,但我认为大多数都在考虑拆分。但是,每次出现“。”时都会进行拆分。。您宁愿寻找的是分区。
string = "folder/to_path/filename.ext" extension = string.rpartition(".")[-1]