文件后缀名判定可能存在的问题

技能分享
Author

MAO Dongyang

Published

January 28, 2024

文件后缀名判定可能存在的问题

后缀名应当是string.split('.')后返回列表的最后一项,而不是第二项

考虑如下代码

media_name = "A.B.jpeg"
# File extension
file_ext = media_name.split('.')[1]

# Check that media format is supported
assert(len([i for i in ['bmp','jpeg', 'png','gif','mp4', 'x-msvideo'] \
            if file_ext == i]) > 0), "File type not supported"

问题出在media_name.split('.')[1]这一行,当文件名或路径中存在多个点号(.)时,会导致错误的后缀提取。例如,当文件路径为C:\Users\MDY\AppData\Local\Temp\tmp435q8bsg.opensesame_pool\test.jpeg时,file_ext将会为opensesame_pool\test,而不是正确的后缀名jpeg。 后缀名并不是由.分隔的第二个字符串,而应该是最后一个字符串。所以建议将提取后缀的代码改为file_ext = media_name.split(‘.’)[-1],以确保始终获取正确的文件后缀。