Python按顺序读取文件夹中文件
交流、咨询,有疑问欢迎添加QQ 2125364717,一起交流、一起发现问题、一起进步啊,哈哈哈哈哈
涉及到文件操作,我们有时候会读取一个文件夹中的所有的文件。这些文件可能是文件名完全混乱的,也可能是完全格式化的(如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')
总结一下:想要按顺序读取文件夹中的文件,方法不是固定的,对于不同的文件名见招拆招才是上策。实在不行咱们还可以动用我们的大杀器:正则表达式,只需要我们有一个善于发现文件名特征的眼睛就难不倒我们啦。
各位看官老爷,如果觉得对您有用麻烦赏个子,创作不易,0.1元就行了。下面是微信乞讨码:
添加描述
添加描述
- 【java开发系列】—— java输入输出流
- Oracle基础知识-oracle常用命令
- 【java开发系列】—— JDK安装
- 【java开发系列】—— struts2简单入门示例
- JAVA利用poi获取world文件内容
- Oracle基础知识-数据迁移
- JAVA利用jxl读取Excel内容
- JAVA利用jxl读取Excel内容
- 【java开发系列】—— 自定义注解
- CSS 特殊属性介绍之 pointer-events
- 【java开发系列】—— 集合使用方法
- Elasticsearch安装
- 【java开发系列】—— 深克隆和浅克隆
- 【java开发系列】—— JDOM创建、修改、删除、读取XML文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法