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

如何按序号顺序读取3000个文本文件并生成文本数组?

解决按序号顺序读取文本文件的问题

这问题我太熟了!glob返回的文件顺序是操作系统文件系统的默认排序(本质是字符串排序),所以才会出现10.txt排在2.txt前面的情况。给你两种实用的解决办法,按需选择:

方案1:对glob结果按数字序号排序

如果你的文件夹里可能存在非连续的文件(比如偶尔缺几个,但想读取所有存在的文件并按数字排序),用这个方案最合适:

from pickle import dump
import glob
import os

textlist = []
textfiles = glob.glob('D:/qrt/aTxt/*.txt')

# 定义一个函数,从文件名中提取数字序号作为排序依据
def get_file_number(file_path):
    # 先拿到文件名(比如从"D:/qrt/aTxt/123.txt"得到"123.txt")
    file_name = os.path.basename(file_path)
    # 分割出数字部分并转成整数("123.txt" → "123" → 123)
    return int(file_name.split('.')[0])

# 用数字序号对文件列表排序
sorted_files = sorted(textfiles, key=get_file_number)

# 遍历排序后的文件读取内容
for file_path in sorted_files:
    # 用with语句自动管理文件,不用手动close,更安全
    with open(file_path, 'r') as f:
        text_content = f.read()
        textlist.append(text_content)

dump(textlist, open('textlists.pkl', 'wb'))

关键说明:

  • os.path.basename用来剥离路径,只保留文件名;
  • 把文件名里的数字转成整数再排序,就能实现真正的数字大小排序,而不是字符串排序;
  • with语句是Python处理文件的最佳实践,能避免忘记关闭文件导致的资源泄漏。

方案2:直接生成序号文件名并读取

如果你确定文件夹里的文件是严格从1.txt到3000.txt连续存在的,或者想强制按这个顺序读取(同时跳过/提示缺失的文件),这个方案更直接:

from pickle import dump
import os

textlist = []
folder_dir = 'D:/qrt/aTxt'

# 遍历1到3000的序号,逐个生成文件名
for num in range(1, 3001):
    file_path = os.path.join(folder_dir, f"{num}.txt")
    # 可选:检查文件是否存在,避免报错
    if os.path.exists(file_path):
        with open(file_path, 'r') as f:
            text_content = f.read()
            textlist.append(text_content)
    else:
        print(f"⚠️  警告:文件 {file_path} 不存在,已跳过")

dump(textlist, open('textlists.pkl', 'wb'))

关键说明:

  • 用range(1, 3001)直接生成1到3000的整数序号,确保顺序绝对正确;
  • os.path.join用来拼接路径,避免手动写路径时出现斜杠错误;
  • 加入os.path.exists检查,可以在文件缺失时给出提示,而不是直接抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:34:54