Python按顺序读取文件夹中文件
参考资料:
https://blog.csdn.net/qq_22227123/article/details/79903116
https://blog.csdn.net/merdy_xi/article/details/78409632
涉及到文件操作,我们有时候会读取一个文件夹中的所有的文件。这些文件可能是文件名完全混乱的,也可能是完全格式化的(如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')
总结一下:想要按顺序读取文件夹中的文件,方法不是固定的,对于不同的文件名见招拆招才是上策。实在不行咱们还可以动用我们的大杀器:正则表达式,只需要我们有一个善于发现文件名特征的眼睛就难不倒我们啦。
Python按顺序读取文件夹中文件的更多相关文章
- python批量处理文件夹中文件的问题
用os模块读取文件夹中文件 原来的代码: import osfrom scipy.misc import imread filenames=os.listdir(r'./unprocess')for ...
- C# 将文件夹中文件复制到另一个文件夹
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- php获取指定文件夹中文件名称
/** * php获取指定文件夹中文件名称 * @author jackie <2018.10.10> */ public static function getFileName($fil ...
- Python之获取文件夹中文件列表以及glob与fnmatch模块的使用
获取文件夹中的文件列表 print(os.listdir("../secondPackage")) # ['__init__.py', 'secondCookBook.py', ' ...
- C#实现对指定文件夹中文件按修改时间排序
string path = "~/Document/Introduction/团队管理制度/"; DirectoryInfo dirinfo = new Di ...
- 【linux】复制文件夹中文件,排除部分文件
如下 cp `ls|grep -v -E '*json|out'|xargs` /home/data/ 用grep -v 表示排除, -E 表示正则 ls|grep -v -E '*json|out ...
- Java访问文件夹中文件的递归遍历代码Demo
上代码: import java.io.File; /* * 需求:对指定目录进行所有内容的列出(包含子目录中的内容) * 也可以理解为 深度遍历. */ public class FindAllFi ...
- python文件夹中文件读取踩坑
Q: 进行数据集图片预处理时,初始命名如下图(Fig1左),发现读取文件时,读取的结构并非如所设想的那样顺序读取 Fig 1 A: pyhton读取文件的时候,按照文件名的ascii码中的顺序进行逐位 ...
- 使用java读取文件夹中文件的行数
使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个 ...
随机推荐
- WordPress 设置图片的默认显示方式(尺寸/对齐方式/链接到)
在文章中插入图片时,我们几乎每次都要设置图片的尺寸.对齐方式和链接方式,是比较耗时费力的.其实我们可以给这几个选项设置默认参数,省去我们每次设置的麻烦. 可以将下面的代码添加到主题的 function ...
- WPF之数据绑定Data Binding
一般情况下,应用程序会有三层结构:数据存储层,数据处理层(业务逻辑层),数据展示层(UI界面). WPF是“数据驱动UI”. Binding实现(通过纯C#代码) Binding分为source和ta ...
- Java——MVC模式
MVC:Model View Controller 一般用于动态程序设计,实现了业务逻辑和表示层分离 Model:掌控数据源-->程序员编写程序或者实现算法,数据库人员进行数据库操作等:响应用户 ...
- JVM调优总结(六)-新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...
- Java中的集合类型体系(一)
Java中的集合类型体系(一) 提问:为什么需要集合? 通常情况下,程序需要根据运行时才知道创建了多少对象.若非程序运行时,而在开发阶段,我们并不知道创建了多少对象,甚至不知道对象的准确类型,为了满足 ...
- 利用Python进行数据分析第六季第七集
翩翩一叶扁舟载不动许多愁https://www.wenjuan.com/s/uMRVrmv/双肩扛起的是数不尽的忧https://www.wenjuan.com/s/uMRVrmv给我一杯酒喝尽人间仇 ...
- Vue中keep-alive的使用
Vue中keep-alive的使用我总结的有两种方式应用: 首先简述一下keep-alive的作用,kee-alive可以缓存不活动的的组件.当组件之间进行相互切换的时候,默认会销毁,当重新切换回来时 ...
- Java实现 蓝桥杯 算法提高 最大值路径
试题 算法提高 最大值路径 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 刷微博,编程序.如下图所示,@北京发布 提出了如下"头脑震荡"问题.对此问题做一般化描 ...
- Java实现 洛谷 P2118 比例简化
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- 【整理】JVM知识点大梳理
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.引入Java语 ...