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

如何按文件夹原始顺序读取所有TXT文件内容存入Python数组

问题原因

glob.iglob的返回顺序由操作系统文件系统的底层遍历逻辑决定,和你在文件资源管理器中看到的顺序没有关联。尤其你的文件名包含多段数字时,默认字符串排序会出现Animation1000_10_1.txt排在Animation1000_2_0.txt前面的问题,这就是你读取内容顺序错乱的核心原因。

实现按指定顺序读取的方案

场景1:按文件资源管理器中「名称排序」的顺序读取(最常用)

这种需求需要对文件名做自然排序,保证文件名内的数字按数值大小排序而非字符串字典序排序,有两种实现方式:

  • 方式1:使用第三方库natsort(操作简单,适配所有带数字的文件名格式)
    1. 先安装依赖:pip install natsort
    2. 调整后代码:
    import glob
    import numpy as np
    from natsort import natsorted
    
    # 1. 收集所有txt文件路径
    file_paths = glob.glob(r'E:/PSNR_RDCURVE/*.txt')
    # 2. 对路径做自然排序,和资源管理器名称排序结果一致
    sorted_file_paths = natsorted(file_paths)
    # 3. 按排序后的路径读取内容
    psnr_bitrate = np.vstack([np.loadtxt(path, dtype='float') for path in sorted_file_paths])
    
  • 方式2:自定义排序规则(无需安装第三方库,适配你当前的文件名格式)
    直接提取文件名中的所有数字段作为排序依据,代码如下:
    import glob
    import re
    import numpy as np
    
    file_paths = glob.glob(r'E:/PSNR_RDCURVE/*.txt')
    # 自定义排序key:提取文件名中所有数字转为元组做排序依据
    def get_sort_key(file_path):
        file_name = file_path.split('/')[-1]
        num_list = re.findall(r'\d+', file_name)
        return tuple(map(int, num_list))
    
    sorted_file_paths = sorted(file_paths, key=get_sort_key)
    psnr_bitrate = np.vstack([np.loadtxt(path, dtype='float') for path in sorted_file_paths])
    

场景2:按文件创建/修改时间顺序读取

如果你的「原始顺序」指的是文件生成的先后顺序,直接修改排序的key即可:

import glob
import os
import numpy as np

file_paths = glob.glob(r'E:/PSNR_RDCURVE/*.txt')
# 按文件创建时间排序(Windows下生效,Linux下getctime返回元数据修改时间)
sorted_file_paths = sorted(file_paths, key=lambda x: os.path.getctime(x))
# 如需按修改时间排序,把getctime换成getmtime即可
psnr_bitrate = np.vstack([np.loadtxt(path, dtype='float') for path in sorted_file_paths])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:45:04