python文件可以按什么顺序读_Python按顺序读取文件夹中文件

参考资料:

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

首先不得不说的是python中的os.listdir()方法。 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。功能是不是一目了然?

但是,os.listdir()返回的文件名不一定是顺序的,这就要求我们对返回的文件名列表进行排序:

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

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

import os

path = '/Users/apple/Desktop/OCR'

path_list = os.listdir(path)

path_list.remove('.DS_Store') # macos中的文件管理文件,默认隐藏,这里可以忽略

print(path_list)

输出结果如下:

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

OK,既然os.listdir(path)返回的是文件名列表,那么列表不是可以排序吗,我只要用sort()方法,给列表中的文件名排个序不就好了?看看效果:

path = '/Users/apple/Desktop/OCR'

path_list = os.listdir(path)

path_list.remove('.DS_Store') # 同上

path_list.sort()

print(path_list)

输出结果如下:

可见,大致的顺序有了。但是糟糕的是10,11,12排到了2前面,这显然是因为sort()采取了按字符键值排序的手段。

那么怎样解决这个问题呢?我们对代码稍作改变:

path = '/Users/apple/Desktop/OCR'

path_list = os.listdir(path)

path_list.remove('.DS_Store')

path_list.sort(key=lambda x:int(x[:-4]))

print(path_list)

新加入的一行做的事情是--对每个文件名将句号前的字符串转化为数字,然后以数字为key来进行排序。这样便能够按照我们的心意来排序了。动手试试看看~~

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

path = '/Users/apple/Desktop/OCR'

path_list = os.listdir(path)

path_list.remove('.DS_Store')

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

print(path_list)

这样写的话就只需考虑句号前面的数字顺序了,更有普适性。

水到渠成,读取文件:

for filename in path_list:

f = open(os.path.join(path,filename),'rb')

总结一下:想要按顺序读取文件夹中的文件,方法不是固定的,对于不同的文件名见招拆招才是上策。实在不行咱们还可以动用我们的大杀器:正则表达式,只需要我们有一个善于发现文件名特征的眼睛就难不倒我们啦。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值