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

如何对含数字的视频帧文件列表进行正确排序?

按文件名中的数字对视频帧文件列表正确排序

问题说明

我有一个存放视频帧的文件夹,需要按顺序读取其中的文件,但默认排序方法得到的结果不符合数字顺序:

data_dir = './data/'
filenames = listdir(data_dir)
N = len(filenames)
filenames.sort()
filenames 

# 输出结果
['Image1.jpg',
 'Image10.jpg',
 'Image11.jpg',
 'Image12.jpg',
 'Image13.jpg',
 'Image14.jpg',
 'Image15.jpg',
 'Image2.jpg',
 'Image3.jpg',
 'Image4.jpg',
 'Image5.jpg',
 'Image6.jpg',
 'Image7.jpg',
 'Image8.jpg',
 'Image9.jpg']

解决方法

方法1:自定义固定格式的数字提取

针对固定格式的文件名(如示例中的ImageX.jpg),可以通过字符串分割提取数字,作为排序键:

import os

data_dir = './data/'
filenames = os.listdir(data_dir)

def get_frame_number(filename):
    # 从文件名中提取数字部分并转为整数
    return int(filename.replace('Image', '').replace('.jpg', ''))

filenames.sort(key=get_frame_number)
print(filenames)

方法2:正则表达式通用数字提取

如果文件名格式不固定,用正则表达式匹配文件名中的数字,兼容性更强:

import os
import re

data_dir = './data/'
filenames = os.listdir(data_dir)

def extract_num(filename):
    # 匹配文件名中的第一个连续数字序列
    num_match = re.search(r'\d+', filename)
    return int(num_match.group()) if num_match else 0

filenames.sort(key=extract_num)
print(filenames)

方法3:使用natsort库实现自然排序

借助第三方库natsort直接实现自然排序,无需手动提取数字:

import os
from natsort import natsorted

data_dir = './data/'
filenames = os.listdir(data_dir)
filenames = natsorted(filenames)
print(filenames)

使用前需安装库:pip install natsort

内容的提问来源于stack exchange,提问作者S.EB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:25:21