os.listdir踩坑记录

最近在做动作识别算法相关工作,在测试的时候需要将目标检测的检测结果和对应的原图像对齐后传入进行下一步工作。在windows下跑的测试代码,结果转换后的效果正常。但是将代码转移到服务器后出现视频帧的乱序播放,找了半天才定位到是os.listdir的问题。

在读取文件夹内数据的时候,用到了os.listdir()这个函数,用于列出文件夹内文件和文件夹的名字列表。

img_names = os.listdir(img_path)
dect_names = os.listdir(txt_path)

在windows是可以按照顺序正常读取,但在windows下面是乱序读取!!!

由于os.listdir()得到的是一个列表,所以可以利用列表内置方法list.sort()对得到的乱序列表进行排序,得到有序的列表。

img_names = os.listdir(img_path)
dect_names = os.listdir(txt_path)
img_names.sort()  #加上这两行排序
dect_names.sort()

注意区分list.sort()和sorted()。
sort()是list特有的方法,在原有列表上进行排序,没有返回值。而sorted()就不一样了,它是python内置函数,不仅可以用于list,还可以用于其他类型数据。它不改变原有对象的值,而是新建一个列表,返回的是排好序的列表。也就是说应该写成这样:

img_names = os.listdir(img_path)
dect_names = os.listdir(txt_path)
img_names = img_names.sorted()
dect_names = dect_names.sorted()

问题解决!


版权声明:本文为huang_2016原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。