python實現根據影象路徑排序
阿新 • • 發佈:2020-11-02
- 實現功能:輸入為影象路徑列表,根據影象名稱中的數字大小實現影象路徑的排序
from functools import cmp_to_key def get_suffix(filename): """a.jpg -> jpg""" pos = filename.rfind('.') if pos == -1: return '' return filename[pos:] ''' 求兩個字串的最長公共子串 思想:建立一個二維陣列,儲存連續位相同與否的狀態 ''' def get_num_of_common_substr(str1, str2): lstr1 = len(str1) lstr2 = len(str2) record = [[0 for i in range(lstr2+1)] for j in range(lstr1+1)] # 多一位 maxNum = 0 # 最長匹配長度 p = 0 # 匹配的起始位 for i in range(lstr1): for j in range(lstr2): if str1[i] == str2[j]: # 相同則累加 record[i+1][j+1] = record[i][j] + 1 if record[i+1][j+1] > maxNum: # 獲取最大匹配長度 maxNum = record[i+1][j+1] # 記錄最大匹配長度的終止位置 p = i + 1 return str1[p-maxNum:p] #給出一個絕對路徑格式 .../.../color1.png .../.../color20.png 找到影象名中數字的位置,比較數字大小 def sort_by_index(str1,str2): suffix = get_suffix(str1) str_1 = str1.split("/")[-1].replace(f'{suffix}',"") str_2 = str2.split("/")[-1].replace(f'{suffix}',"") sub_str = get_num_of_common_substr(str_1,str_2) int_str1 = int(str_1.replace(f'{sub_str}',"")) if len(str_1.replace(f'{sub_str}',"")) else 0 int_str2 = int(str_2.replace(f'{sub_str}',"")) if len(str_2.replace(f'{sub_str}',"")) else 0 return int_str1-int_str2 if __name__ == '__main__': str_list = ["a/b/c/color15.png","a/b/c/color2.png","a/b/c/color13.png","a/b/c/color1.png"] str_list.sort(key=cmp_to_key(sort_by_index)) print(str_list)