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

Python使用os.listdir如何按1到15的数字顺序读取目录文件

问题原因

os.listdir()返回的文件名是字符串类型,默认排序遵循ASCII字典序规则,字符串"10"的首字符"1"的ASCII码小于"2"的ASCII码,因此会出现1、1015排在29前面的情况。

  • 额外提示:如果只需要读取文件、排除目录,可先对文件名单做过滤:
    file_names = [x for x in os.listdir() if os.path.isfile(x)]
    
实现数字顺序读取的方法

通过sorted()函数的key参数自定义排序规则,将文件名中的数字部分转为整数作为排序依据即可。

场景1:文件为纯数字命名(无后缀)

import os

file_names = os.listdir()
# 按文件名转整数后的数值排序
sorted_file_names = sorted(file_names, key=lambda x: int(x))
# 生成绝对路径列表
files_path = [os.path.abspath(x) for x in sorted_file_names]

场景2:文件带后缀(如1.txt、2.docx)

需要先提取文件名前缀再转整数:

import os

file_names = os.listdir()
# os.path.splitext会把文件名拆分为(前缀, 后缀)元组
sorted_file_names = sorted(file_names, key=lambda x: int(os.path.splitext(x)[0]))
files_path = [os.path.abspath(x) for x in sorted_file_names]

可选优化:过滤非数字命名的文件

如果目录下存在不符合数字命名规则的文件,可以加异常处理避免报错:

import os

def parse_file_sort_key(file_name):
    try:
        # 提取数字前缀作为排序依据
        return int(os.path.splitext(file_name)[0])
    except ValueError:
        # 非数字命名的文件默认排到最后,也可以自行调整规则
        return float('inf')

file_names = os.listdir()
sorted_file_names = sorted(file_names, key=parse_file_sort_key)
# 如需完全过滤非数字命名的文件,添加如下代码
# sorted_file_names = [f for f in sorted_file_names if parse_file_sort_key(f) != float('inf')]
files_path = [os.path.abspath(x) for x in sorted_file_names]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:18:03