今天遇到了用Python来进行批量读取同一个文件夹下的多个文件却不是按照从小到大的顺序读取的,出现了下面这样的情况:

发现没?读取的文件顺序是乱的,不是我们想要的从小到大这样的顺序,即原文件这样:

后来掌柜查阅一番后再思考了一下,发现它之所以会出现“乱序”是因为使用默认ASCII的字符串排序方式。就是如果前面都一样,那么就看下一位;所以这里除开’user_'后,它就按照先看后面数字的第一位来排,第一位看完再看第二位,然后就得到了一开始那样的排序结果。。。所以解决办法就是要把它改成按数字来排序的方式即可得到👆图这样的结果。

下面就直接上代码了:

import os

path = 'E:/user_gender'
fileslist = os.listdir(path)
#先定义一个排序的空列表
sort_num_list = []
for file in fileslist:
    sort_num_list.append(int(file.split('user_')[1].split('.sql')[0])) #去掉前面的字符串和下划线以及后缀,只留下数字并转换为整数方便后面排序
    sort_num_list.sort() #然后再重新排序
    
#print(sort_num_list)
#接着再重新排序读取文件
sorted_file = []
for sort_num in sort_num_list:
    for file in fileslist:
        if str(sort_num) == file.split('user_')[1].split('.sql')[0]:
            sorted_file.append(file)
            
#print(sorted_file)
for i in sorted_file:
    file = path + '/' + i
    print(file)

重新再次读取文件就可以得到我们想要的从小到大的排序结果:

参考资料:
python 顺序读取文件夹下面的文件(自定义排序方式)