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个字符。可以根据具体的实际情况进行修改。

Python中,os.listdir遍历纯数字文件乱序如何解决的更多相关文章

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

    编写pytohn脚本时通常需要批处理. 列出指定目录下的所有文件/文件夹 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,但有个很明显的缺点,它的默认顺序不是有序的或 ...

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

    上周应别人要求,使用python批量修改文件名称.文件名有规律,当时就用了一个函数直接精确的用文件名替换了.后来想直接可以用listdir来遍历每个文件来修改更加通用一些.但是看了os.listdir ...

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

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

  4. python中os.walk浏览目录和文件

    #!/usr/bin/env python # 2.py # use UTF-8 # Python 3.3.0 # os.walk()的使用 import os # 枚举dirPath目录下的所有文件 ...

  5. python中OS模块操作文件和目录

    在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...

  6. python使用os.listdir和os.walk获得文件的路径

    python使用os.listdir和os.walk获得文件的路径   目录 情况1:在一个目录下面只有文件,没有文件夹,这个时候可以使用os.listdir 情况2:递归的情况,一个目录下面既有目录 ...

  7. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  8. Python中os和shutil模块实用方法集锦

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  9. python中os模块中文帮助

    python中os模块中文帮助   python中os模块中文帮助文档文章分类:Python编程 python中os模块中文帮助文档 翻译者:butalnd 翻译于2010.1.7——2010.1.8 ...

随机推荐

  1. 阿里云服务器+宝塔环境+LNMP+tp5.1安装和调试

    1.首先肯定得有个阿里云服务器,楼主是用来自己测试用得,所以就买了个1年得突发性实例,虽然网上都说别买这种,不过个人测试还是没有多少要求得 2.买了服务器之前可以顺带买个域名,再顺带去备案一下,阿里云 ...

  2. Cloudera Manager Server CDH 5.15部署

    安装前准备 主机和系统 Host OS Memory IP bigdata001-dev Cent OS 7.4 x64 32G 192.168.1.1 bigdata002-dev Cent OS ...

  3. innodb_flush_log_at_trx_commit

    innodb_flush_log_at_trx_commit   innodb_buffer_pool_size如 果用Innodb,那么这是一个重要变量.相对于MyISAM来说,Innodb对于bu ...

  4. 2017-2018-1 20155220 《信息安全系统设计基础》课下实践——实现mypwd

    学习pwd命令 输入pwd命令 于是man 1 pwd查看pwd详细 然后查看pwd实现需要的系统调用man -k; grep 在这发现了一个功能相同的内核函数getcwd 到这步就很简单了,先查看这 ...

  5. docker for windows 使用mssql2017

    原文:docker for windows 使用mssql2017 确实有些坑,本来之前坑都踩过了,但是时间一久就忘记了,这次换电脑又都踩了一遍. 几个要点(坑): 1.docker安装时默认就好.然 ...

  6. mfc 引用

    一.引用的概念 引用(reference)是另一标识符的别名,可以说是C++的一种新的变量类型,是对C的重要扩充.当建立引用时,程序用另一个变量或对象(目标)的名字初始化它(即它代表了标识符的左值), ...

  7. python基础学习1-装饰器在登陆模块应用

    LOGIN_USER ={"islogin":False} def outer(func): def inner(*args,**kwargs): if LOGIN_USER[&q ...

  8. 快速搭建属于自己的mongodb数据库

    前言 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写,支持Windows,Linux,OSX,Solaris等平台,默认端口为27017,是一个效率非常高的nosql数据库. 我的 ...

  9. File System Object(FSO对象)A

    FSO对象模型包含在Scripting 类型库 (Scrrun.Dll)中,它同时包含了Drive.Folder.File.FileSystemObject和TextStream五个对象: 1.Dri ...

  10. JMeter下Groovy和BeanShell语言在不同组件中性能差异实践探究

    一般而言JMeter下性能最好的是jar包这类java原生请求,对于JMeter并没有原生支持的请求,一般都会将其直接编译为jar包,然后再JMeter中调用,这样性能最好. 但是有些需求并不适合用j ...