簡體   English   中英

按文件名排序列表

[英]Sorting list by filename

我讀入了一些像這樣存儲的圖像的文件名:

(path/to/images/1_1.png)
(path/to/images/1_2.png) ...
(path/to/images/10_1.png) ...
(path/to/images/1000_1.png)

使用此代碼將文件名讀取到列表時

import cv2
import glob

folders = glob.glob(r'C:\Users\tobis\OneDrive\Desktop\Masterarbeit\data\2017-IWT4S-CarsReId_LP-dataset\*')
imagenames_list = []
for folder in folders:
    for f in glob.glob(folder+'/*.png'):
        imagenames_list.append(f)

我列表中的第一張圖片是文件名為(path/to/images/1000_1.png)而不是(path/to/images/1_1.png)的圖片。 以正確的順序獲取文件很重要,因為我需要將圖像與另一個列表匹配。 有沒有辦法按照我需要的方式對列表進行排序?

您所指的是自然排序,而不是默認的字典排序。

這是一個我認為可以滿足您需求的示例。

import re

def natural_sort(l):
    convert = lambda text: int(text) if text.isdigit() else text.lower()
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
    return sorted(l, key = alphanum_key)

fl = ['path/to/images/1000_1.png', 'path/to/images/1_1.png']

print(natural_sort(fl))

參考: 是否有內置的 function 用於字符串自然排序?

好問題!

請參閱此工作示例:

sorted(['path/to/images/1000_1.png',
        'path/to/images/1_1.png',
        'path/to/images/1_2.png',
        'path/to/images/10_1.png'
       ], 
        key=lambda x: int(x.split('/')[-1][:-4].replace('_','')))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM