Python按照指定顺序读取文件夹中的文件

*** 首先,要想按照指定顺序读取文件,首先就得(重命名)使文件名具有一定的规律。比如将文件名称全部命名成数字,因为数字可以比较大小,方便排序。


参考链接:https://www.cnblogs.com/chester-cs/p/12252358.html

 

读取一个文件夹中的所有的文件,这些文件可能是文件名完全混乱的,也可能是完全格式化的(如1.png,2.png...)。下面介绍Python中的几种按顺序读取文件夹中文件的方法。

1. 首先是python中的 os.listdir() 方法。 os.listdir() 用于返回指定的文件夹包含的文件或文件夹的名字的列表。但是,os.listdir()返回的文件名不一定是顺序的,还需要对返回的文件名列表进行排序:

假设我们有一个这样的文件夹:

 

利用os.listdir()方法写出如下代码:

import os
 
path = '/Users/28350/Desktop/Files'
path_list = os.listdir(path)
print(path_list)

 

输出结果如下:

可见返回的文件名列表是一个奇怪的顺序。

 

2. os.listdir(path)返回的是文件名列表,因为列表可以排序,只要用 sort() 方法,给列表中的文件名排个序不就好了?看看效果:

path = '/Users/28350/Desktop/Files'

path_list = os.listdir(path)
path_list.sort()
print(path_list)

 

输出结果如下: 

可见,大致的顺序有了。但是10,11,12排到了2前面,这显然是因为sort()采取了按字符键值排序的手段。怎么解决这个问题呢?对代码稍作改变:

path = '/Users/28350/Desktop/Files'

path_list = os.listdir(path)
path_list.sort(key=lambda x:int(x[:-4]))
print(path_list)

  

新加入的一行做的作用是将每个文件名中句号 (.) 前的字符串转化为数字,然后以数字为key来进行排序。这样便能够按照我们的心意来排序了。

3. 使用的时候发现了新问题:这个手段要求文件名高度格式化,假如一堆图片中夹杂了一张其他格式的,比如13.jpeg,这样的话上面的代码会读到句号,转化不成int而报错。这时候不妨试试下面的方法。

 

path = '/Users/28350/Desktop/Files'

path_list = os.listdir(path)
path_list.sort(key=lambda x:int(x.split('.')[0]))
print(path_list) 

 

 

posted @ 2020-04-24 19:30  `'手可摘星辰  阅读(8511)  评论(0编辑  收藏  举报