You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按文件夹原始顺序读取图片?Python读取顺序混乱问题求解

按文件夹原始顺序读取图片的解决方法

glob.glob() 返回的文件顺序由操作系统文件系统决定,比如Windows下默认是字符串字典序排序,这和资源管理器里的自然排序(如数字文件名按数值排序)或文件创建顺序不一致,导致读取顺序混乱。以下是几种针对性的解决方案:

方案1:自然排序(匹配资源管理器名称顺序)

如果你的图片文件名包含数字,资源管理器会按数值大小排序,而glob默认按字符串排序,这时候可以用natsort库实现自然排序,和资源管理器显示顺序一致。

  1. 先安装依赖:
pip install natsort
  1. 修改后的代码:
import os
import glob
from natsort import natsorted

def read_img(path):
    global img_array_input, size
    img_array_input = []
    # 匹配所有jpg/JPG格式文件,并进行自然排序
    img_paths = natsorted(glob.glob(os.path.join(path, "*.[jJ][pP][gG]")))
    
    for filename in img_paths:
        img_array_input.append(filename)
        print("image array append : ", filename)
    
    size = len(img_array_input)
    
    for i in img_array_input:
        print("detection ")
        detection(i)
        print("detection out")

方案2:按文件创建时间排序(Windows专属)

如果要严格按照文件被添加到文件夹的原始顺序(创建时间)读取,可以调用Windows API获取创建时间并排序:

import os
import glob
import win32file
import win32con

def get_creation_time(filepath):
    # 获取文件的创建时间
    handle = win32file.CreateFile(
        filepath,
        win32con.GENERIC_READ,
        win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
        None,
        win32con.OPEN_EXISTING,
        win32con.FILE_ATTRIBUTE_NORMAL,
        None
    )
    create_time = win32file.GetFileTime(handle)[0]
    win32file.CloseHandle(handle)
    return create_time

def read_img(path):
    global img_array_input, size
    img_array_input = []
    img_paths = glob.glob(os.path.join(path, "*.[jJ][pP][gG]"))
    # 按创建时间排序,保持文件原始添加顺序
    img_paths.sort(key=lambda x: get_creation_time(x))
    
    for filename in img_paths:
        img_array_input.append(filename)
        print("image array append : ", filename)
    
    size = len(img_array_input)
    
    for i in img_array_input:
        print("detection ")
        detection(i)
        print("detection out")

方案3:跨平台按修改时间排序

如果需要跨平台兼容,且可接受按文件修改时间排序(通常和创建时间接近):

import os
import glob

def read_img(path):
    global img_array_input, size
    img_array_input = []
    img_paths = glob.glob(os.path.join(path, "*.[jJ][pP][gG]"))
    # 按文件修改时间排序
    img_paths.sort(key=lambda x: os.path.getmtime(x))
    
    for filename in img_paths:
        img_array_input.append(filename)
        print("image array append : ", filename)
    
    size = len(img_array_input)
    
    for i in img_array_input:
        print("detection ")
        detection(i)
        print("detection out")

内容的提问来源于stack exchange,提问作者melissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:40:42