Python中,os.listdir遍历纯数字文件乱序如何解决
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python中,os.listdir遍历纯数字⽂件乱序如何解决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个字符。
可以根据具体的实际情况进⾏修改。