亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按順序組織列表中的元素

按順序組織列表中的元素

忽然笑 2022-11-29 14:52:11
我正在加載 700 張圖像,我需要它們按照名稱的順序排列(_DCS6825_01、_DCS6825_02...),但是當嘗試這樣做時,在圖像 _DCS6825_10 之后,下一個要加載的是圖像 _DCS6825_100,然后是 _DCS6825_101圖片 11(_DCS6825_11),我該如何解決。這是我的代碼:from PIL import Imageimport globimport matplotlib.pyplot as pltimport ospath = r'C:\Users\juanc\Desktop\prueba origen\restich\\'image_list = []for filename in glob.glob(path+'*.jpg'):    im=Image.open(filename)    image_list.append(im)sortedlist = sorted(image_list)print(sortedlist)排序產生錯誤:TypeError: '<' not supported between instances of 'JpegImageFile' and 'JpegImageFile'謝謝您的幫助
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

你在這里有兩個問題:


首先是您試圖自己對圖像進行排序,而不是使用它們的文件名。正如評論中所指出的,您應該首先對列表進行排序,然后加載圖像:


path = r'...'

image_list = glob.glob(path + '*.jpg')

sortedlist = sorted(image_list)

loaded_images = []

for filename in image_list:

    im = Image.open(filename)

    loaded_images.append(im)


第二個是當您對列表進行排序時,sorted使用文件名,從而使用字母順序,而不是像您想要的那樣使用文件名的最后一個數字進行排序。


我建議在這里使用自定義鍵對列表進行不同的排序。假設文件名始終遵循相同的模式_DSC<number1>_<number2>.<ext>,您希望根據 對文件進行排序number2,您可以使用:


sortedlist = sorted(

        image_list,

        key=lambda filename: int(filename.split('_')[-1].split('.')[0])

    )

此處的 lambda 將針對它獲取的每個元素(在本例中為文件名)拆分_為最后一個元素,因此在本例中為最后一個數字,不帶擴展名(因此為.split('.')[0])并將其轉換為 int 以刪除過多的開頭的零能夠正確排序。


請注意,只有當所有文件名都遵循相同的模式時,這才有效,否則,您可能會遇到其他問題。


希望這可以幫助!


查看完整回答
反對 回復 2022-11-29
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號