Python中,os.listdir遍历纯数字文件乱序如何解决

日常跑深度学习视觉相关代码时,常常需要对数据集进行处理。许多图像文件名是利用纯数字递增的方式命名。通常所用的排序函数sort(),是按照string进行比较的。例如原始的目录下的文件是:

1.jpg
12.jpg
19.jpg
120.jpg
190.jpg

但经过os.listdir()后的顺序就变为:

1.jpg
12.jpg
120.jpg
19.jpg
190.jpg

解决这个问题,首先看python中sort()函数的具体用法,分别看python2.x和python3.x中的sorted()和sort()函数:

  • python2.x
    >>>help(list.sort)

    Help on method_descriptor:

    sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort IN PLACE;
    cmp(x, y) -> -1, 0, 1

>>>help(sorted)

Help on built-in function sorted in module builtin:

sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

  • python3.x
    >>>help(list.sort)

    Help on method_descriptor:

    sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort IN PLACE

>>>help(sorted)

Help on built-in function sorted in module builtins:

sorted(iterable, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customise the sort order, and the
reverse flag can be set to request the result in descending order.

(1)由以上可知python2.x与python3.x的区别仅在于参数cmp,python3.x中取消了对cmp的支持。Python3.x直接忽略cmp这个参数即可,为了保证代码通用性,不建议在今后的编程中使用cmp参数。
(2)sort()和sorted()的区别在于sort函数是list列表中的函数,而sorted可以对list或者iterator进行排序。sorted返回的是一个新的排序对象,而sort则是在原对象上进行排序。

基于以上,可以利用python3.x中的sort(key=None, reverse=False)函数来解决上述问题,首先进行参数说明:

key表示一个带参数的函数;
reverse表示是否反序

另外,python2.x的sorted函数中的两个参数表示:

iterable表示list或iterator;
cmp表示带两个参数的比较函数。

通过lambda expression解决,代码如下:
file = os.listdir(path)
file.sort()
file.sort(key = lambda x: int(x[:-4]))
此处x表示参数,x[:-4]则表示只取文件名进行排序,去掉拓展名,此处拓展名是3个字符。可以根据具体的实际情况进行修改。

转载于:https://www.cnblogs.com/LJ-LJ/p/9492228.html

Python中,os.listdir遍历纯数字文件乱序如何解决相关推荐

  1. python中os.listdir()的使用和文件批量重命名方法

    作用 返回指定文件夹路径下的文件名称列表 用法 path_name = './image' #文件夹路径 files = os.listdir(path_name) #路径下的文件名称列表 博文已经迁 ...

  2. Python中os.listdir的排序问题

    参考  Python中os.listdir的排序问题 - 云+社区 - 腾讯云 上周应别人要求,使用python批量修改文件名称. 文件名有规律,当时就用了一个函数直接精确的用文件名替换了.后来想直接 ...

  3. python中os.listdir用法

    python中os.listdir用法 一. 获取指定文件夹下的所有文件 import os path_name = 'E:\test\' # 输入要获取文件的根目录 for filename in ...

  4. 【python】python中os.listdir的排序问题

    今天用os.listdir()遍历文件夹下的图片发现,它的输出结果并不是按照某种特定顺序来的,这样输出就不是固定的. os.listdir的结果就是一个list集,可以使用list的sort方法来排序 ...

  5. Python中os.listdir() 函数用法及实例

    listdir()语法格式:os.listdir(path) 描述:返回指定路径下的文件和文件夹列表. 实例: # 打开文件 path = "./TACOS/" dirs = os ...

  6. python中os.listdir( )函数读取文件夹

    问题:需要批量图片 且要求处理前和处理后的图片顺序相同 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,但有个很明显的缺点,它的默认顺序不是有序的或者说不是通常的顺序 ...

  7. python中os.listdir的用法

    os.listdir()方法用于返回指定文件夹包含的文件或文件夹的名字的列表.这个列表以字母顺序,不包括'.'和'-'即使其在文件夹中. path = 'www/var/http/' os.listd ...

  8. python os.walk遍历目录_python中os.walk()遍历目录中所有文件

    之前一直用判断目录和文件的递归方法来获取一个目录下的所有文件,后来发现python里面已经写好了这个函数,不需要自己递归获取了,记录下os.walk()函数的用法 目的:获取path下所有文件,返回由 ...

  9. python中os操作文件及文件路径

    python中os操作文件及文件路径实例汇总     1 . python获取文件上一级目录:取文件所在目录的上一级目录 os.path.abspath(os.path.join(os.path.di ...

最新文章

  1. linux signal 符号表,铁路信号图形符号
  2. 程序员黑话,看懂的都是老司机!
  3. 《剑指Offer》 二维数组中的查找
  4. SAP License:共享服务的今天和明天
  5. 其它 博客园 自己写的文章 标题含有小写字母 查看文章时 标题就变成大写的了...
  6. css按钮音效设置,带悬停音效(超低声波)的磁吸按钮
  7. c语言编程电影院票务系统,C++课程设计----电影院售票系统
  8. 51单片机 呼吸灯 七彩呼吸灯
  9. 算法图解--python
  10. 20脚的RSIC-V MCU,竟然可以基于FOC开发PMSM电机
  11. 服务器固件降级需要重装系统吗,bios降级,小编教你bios可以降级吗
  12. 用计算机表白我不喜欢你了,【北邮表白墙】与卿初相识,犹如故人归。表白计算机院的苏苏,喜欢你是我最正确的选择?...
  13. I03 403-(Python+mysql) 飞机票销售系统
  14. 国王游戏 [NOIP2012 提高组]
  15. Postman接口自动化测试之— 请求参数进行MD5/SHA256摘要计算
  16. 事务的传播级别(行为)
  17. python中数据类型判断方法(学习笔记)
  18. 异构服务器 微服务_微服务架构是什么?
  19. K8S日常问题-k8s中大量pod 状态 evicted
  20. Bugtags - App 测试 · 从未如此简单

热门文章

  1. html文件中用import,@import引入CSS文件
  2. yaf mysql pdo 封装_PDO 操作数据库
  3. 2017蓝桥杯C++B:日期问题(日期转字符串)
  4. 图像减色处理(色彩量化)
  5. python实现一个简单的【图像中物体坐标】标注小工具
  6. caffe将图像数据转换成lmdb文件
  7. 错误使用sym MEX文件 'D:\matlab\toolbox\maple\maplemex.mexw64' 无效: 缺少依赖共享库 的解决办法
  8. markdown与latex:向量形式给字母加粗 \pmb{}
  9. Java设计模式应用到数据库_Java设计模式在数据库编程中的应用研究
  10. hdu1247 Hat’s Words