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

Python实现OpenCV视频生成:JPG文件数字升序排序问题

我明白你的问题啦——os.listdir()默认是按字符串字典序排序的,这就是为什么img_10.jpg会排在img_2.jpg前面,因为字符串比较时'1'的ASCII码比'2'小。下面给你几个实用的解决方法:

方法1:提取文件名中的数字作为排序键

最直接的方式是从每个文件名里提取出数字部分,转换成整数后作为排序依据,这样就能实现数字升序了。

修改后的代码如下:

import os

images = []
for f in os.listdir('.'):
    if f.endswith('.jpg'):
        images.append(f)

# 提取文件名里的数字,按整数大小排序
images.sort(key=lambda x: int(x.split('_')[1].split('.')[0]))

简单解释:x.split('_')[1]会把img_0.jpg拆分为['img', '0.jpg'],取第二个元素后再用.split('.')[0]得到纯数字字符串,转成整数后就能按数字大小排序了。

方法2:使用natsort库(通用自然排序)

如果你的文件名格式可能有变化,或者不想自己写提取逻辑,推荐用第三方库natsort,它专门处理这种“自然排序”场景,适配各种带数字的文件名。

首先安装库:

pip install natsort

然后代码里这样用:

import os
from natsort import natsorted

# 筛选jpg文件并自然排序
images = natsorted([f for f in os.listdir('.') if f.endswith('.jpg')])

不管文件名里的数字位数多少,它都能正确按数字升序排列,非常省心。

方法3:用glob模块一步完成筛选+排序

glob模块可以直接匹配目标文件,再配合排序逻辑,一步到位:

import glob

# 匹配所有jpg文件并按数字排序
images = sorted(glob.glob('*.jpg'), key=lambda x: int(x.split('_')[1].split('.')[0]))

glob.glob('*.jpg')会直接列出当前目录下所有jpg文件,后续的排序逻辑和方法1一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:39:40