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. 各国货币json文件

    [ {"countryname":"","name":"请选择","currency":" ...

  2. 白帽子讲web安全——访问控制

    上一章说的认证与会话管理,这章是访问控制,刚看访问控制这章的时候,感觉跟上章的“授权”没什么区别,第一感受就是“授权”. 之后看了才进一步了解,“授权”是好比屋子的主人进来了,那么他可以坐在客厅,也可 ...

  3. PTA-括号问题

    括号问题 作者: 李廷元 单位: 中国民用航空飞行学院 时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB 问题描述 给定一串字符,不超过100个字符,可能包括括号.数字.字 ...

  4. 复制web项目时注意修改web项目名

    改web项目的项目名可以右击->properties->搜索web找到settings->修改context name

  5. innodb_flush_log_at_trx_commit

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

  6. HBase数据结构(读书笔记 )

    背景: 最近在做一些跟大数据相关的东西,涉及到数据的存储和分析,考虑各个方面,选择使用HBase进行存储,使用原生Java API进行数据分析,之后会陆续写一系列来说明最近做的东西,给像我这样未曾涉及 ...

  7. font:12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif详解

    在phpcms v9的样式表文件reset.css中有如下一段样式,具体什么意思?代码如下:body,html,input{font:12px/1.5 tahoma,arial,\5b8b\4f53, ...

  8. js简单时间比较的方法(转)

    //时间比较(yyyy-MM-dd) function compareDate(startDate, endDate) {   var arrStart = startDate.split(" ...

  9. 爬取代理IP

    现在爬虫好难做啊,有些网站直接封IP,本人小白一个,还没钱,只能找免费的代理IP,于是去爬了西刺免费代理,结果技术值太低,程序还没调试好, IP又被封了... IP又被封了... IP又被封了... ...

  10. Android Studio|IntelliJ IDEA 上传代码到码云

    码云 新建项目 Android Studio|IntelliJ IDEA 然后仓库就创建好了 此时左方文件应显示为红色 添加代码到git仓库 提交代码到git仓库 push等待被拒绝 拉取README ...