如何按序号顺序读取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
相关产品推荐
相关产品推荐

