python读取文件夹中的文件,是按照什么排序的,为什么12排在1前面?

如题,

In [61]: file_names
Out[61]:
['MgCa_45deg_halfdeg_0_t200.xlsx',
'MgCa_45deg_halfdeg_10_t200_com.xlsx',
'MgCa_45deg_halfdeg_11_t200_com.xlsx',
'MgCa_45deg_halfdeg_12_t200_com.xlsx',
'MgCa_45deg_halfdeg_13_t200_com.xlsx',
'MgCa_45deg_halfdeg_14_t200_com.xlsx',
'MgCa_45deg_halfdeg_15_t200_com.xlsx',
'MgCa_45deg_halfdeg_1_t200_com.xlsx',
'MgCa_45deg_halfdeg_2_t200_com.xlsx',
'MgCa_45deg_halfdeg_3_t200_com.xlsx',
'MgCa_45deg_halfdeg_4_t200_com.xlsx',
'MgCa_45deg_halfdeg_5_t200_com.xlsx',
'MgCa_45deg_halfdeg_6_t200_com.xlsx',
'MgCa_45deg_halfdeg_7_t200_com.xlsx',
'MgCa_45deg_halfdeg_8_t200_com.xlsx',
'MgCa_45deg_halfdeg_9_t200_com.xlsx']

按ascii码来排序,如果想解决该问题,具体如下:
from natsort import natsorted
import os
for root,dirs,files in os.walk(path):
files = natsorted(files)

不是12在1前面,是2在'_'前面

文件排序都是按字符串来的,不会特意给你分成数字

它是按文件中字符在ascii码中的顺序来排的,并且将字符串中每个字符作比较,你上面的 11和1_的问题,1相同,而后一位1在_前面,若你换成减号-那它就在1前面,或者你将序号放在最后,那排序就正常了,这就是按中间字符排序会出现乱七八糟问题的原因

按照字符串排序的,可以将符号放到最后,或者按照_ 前面的字符排序

根据左边第一个排,拍完再按第二个
所以你这个问题的解释,同1楼,因为2在“”前。

按照文件流读取。你这是因为操作系统给你的文件进行了排序,字符和数字按照ascii码表排序