sort排序文件夹下文件,按序号从小到大排序

image.png

python中的sort()和sorted()函数主要用于按升序或降序对数据进行排序。

sort()函数基本语法
用于列表排序的sort函数的语法如下:

:list.sort(reverse=False, key=None)

用法说明如下:参数reverse:默认为False。如果reverse=True,则数据将按降序排列。参数key: 默认为None。我们可以指定一个用户定义的函数来自定义排序。

我们想对文件夹下的图片进行排列打印,

for dirpath, dirnames, filenames in os.walk(path):
    filenames.sort()    
for img in filenames:            
img = os.path.join(dirpath, img)           
 print(img)

结果如下,发现排序未1、10、11、12、13、2、3、4,

image.png

而我们想得到是1、2、3、4、5、6、7、8、9、10、11、12,
sort( ) 默认行为,把数组中所有的项转化为字符串,然后进行 unicode 编码比较。省略了回调函数,所有的数字都会变为字符串,然后按照字符串的比较大小进行比较,也就是unicode 编码比较,
出现以上的排序结果,因为在 unicode编码中 1 开头的最小,其次是 2,3,4,5 等等;

解决方法
原来是因为 sort() 方法还有回调函数,如果省略了 回调函数,那么就有可能出错,如果要确保排序结果的准确,就要给 sort() 加上参数 ( 升序或者降序)

for dirpath, dirnames, filenames in os.walk(path):       
     filenames.sort(key=lambda x: int(x.split(".")[0]))    
     for img in filenames: 
           img = os.path.join(dirpath, img)
           print(img)

[图片上传中...(image.png-dcedfb-1693207217490-0)]

感兴趣的可以在研究一下sorted,
sorted(iterable, key=None, reverse=False) 默认是从小到大

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。