在python中使用模式匹配获取文件扩展名

我试图找到一个文件的扩展名,因为它的名字是一个字符串。 我知道我可以使用函数os.path.splitext但它不能像预期的那样工作,因为我的文件扩展名是.tar.gz.tar.bz2因为它给出的扩展名为gzbz2而不是tar.gztar.bz2分别。
所以我决定使用模式匹配来自己找到文件的扩展名。

print re.compile(r'^.*[.](?P<ext>tar.gz|tar.bz2|w+)$').match('a.tar.gz')group('ext')
>>> gz            # I want this to come as 'tar.gz'
print re.compile(r'^.*[.](?P<ext>tar.gz|tar.bz2|w+)$').match('a.tar.bz2')group('ext')
>>> bz2           # I want this to come 'tar.bz2'

我在我的模式匹配中使用(?P<ext>...) ,因为我也想获得扩展名。

请帮忙。


>>> print re.compile(r'^.*[.](?P<ext>tar.gz|tar.bz2|w+)$').match('a.tar.gz').group('ext')
gz
>>> print re.compile(r'^.*?[.](?P<ext>tar.gz|tar.bz2|w+)$').match('a.tar.gz').group('ext')
tar.gz
>>>

这个? 操作员试图找到最小匹配,所以而不是。*也吃“.tar”。 找到允许.tar.gz匹配的最小匹配。


root,ext = os.path.splitext('a.tar.gz')
if ext in ['.gz', '.bz2']:
   ext = os.path.splitext(root)[1] + ext

有些人遇到问题时会想:“我知道,我会用正则表达式。” 现在他们有两个问题。


我有一个想法,它比用正则表达式打破你的头更容易,有时它听起来也许很愚蠢。
name="filename.tar.gz"
extensions=('.tar.gz','.py')
[x for x in extensions if name.endswith(x)]

链接地址: http://www.djcxy.com/p/46935.html

上一篇: Getting file extension using pattern matching in python

下一篇: ASP.net. Mime type of a downloaded file not detected by browser