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

如何按文件名中的数字对目录内文件进行排序?

这个问题很常见——你碰到的是字符串字典序排序和数字数值排序的差异!os.listdir()返回的文件名都是字符串类型,Python默认的sorted()会按照字符串的字典顺序来排列,所以"10.txt"会排在"2.txt"前面(因为字符'1'的ASCII码比'2'小)。

要实现按数字升序排列,核心是让排序时以文件名里的数字值为依据,而不是字符串本身。这里有几种简单可靠的方法:

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

最直接的方式是用sorted()的key参数,自定义一个函数提取文件名里的数字部分并转为整数:

import os

filepath = "/你的目录路径/"
# 按文件名中的数字值排序
sorted_files = sorted(os.listdir(filepath), key=lambda x: int(x.split('.')[0]))

for file in sorted_files:
    print(file)

这里的lambda x: int(x.split('.')[0])会把每个文件名按.分割,取前面的数字字符串(比如"100.txt"变成"100"),再转换成整数,这样排序时就会按照数字大小来排列了。

方法2:用os.path.splitext更稳妥地处理扩展名

如果担心文件名里出现多个.(虽然你的场景里没有),可以用os.path.splitext来更安全地分离文件名和扩展名:

import os

filepath = "/你的目录路径/"
sorted_files = sorted(os.listdir(filepath), key=lambda x: int(os.path.splitext(x)[0]))

for file in sorted_files:
    print(file)

os.path.splitext(x)会返回一个元组(文件名, 扩展名),比如对"100.txt"会返回("100", ".txt"),取第一个元素就是纯数字字符串,转成整数后作为排序依据。

额外优化:过滤不符合规则的文件

如果目录里可能存在非数字.txt格式的文件,可以先过滤再排序,避免转换整数时出错:

import os

filepath = "/你的目录路径/"
# 先过滤出符合规则的文件:以.txt结尾,且文件名部分是纯数字
valid_files = [f for f in os.listdir(filepath) if f.endswith('.txt') and f.split('.')[0].isdigit()]
# 再按数字排序
sorted_files = sorted(valid_files, key=lambda x: int(os.path.splitext(x)[0]))

for file in sorted_files:
    print(file)

这样处理后,就能完美得到你想要的0.txt 1.txt 2.txt ...的排序结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:46