python的os.listdir()的使用疑惑 5C

os.listdir()获得一个4万个文件名,结果是无序的。请问有什么办法有序的保存到这些文件名到list中,文件名如下图片说明

6个回答

import os

DIR = "/home/serho/workspace/lisp"

def compare(x, y):

stat_x = os.stat(DIR + "/" + x)


stat_y = os.stat(DIR + "/" + y)


if stat_x.st_ctime < stat_y.st_ctime:

    return -1

elif stat_x.st_ctime > stat_y.st_ctime:

    return 1

else:

    return 0

iterms = os.listdir(DIR)

iterms.sort(compare)

for iterm in iterms:

print iterm
qq_38269799
youngkun_wtu 我运行了下,这代码好像有问题
一年多之前 回复
 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。

只支持在 Unix, Windows 下使用。

python好不好用,据说做项目和搭积木一样

可以加个排序,无序状态也有可能是Python版本的问题

qq_38269799
youngkun_wtu .sort()无法对这种类型的进行排序
一年多之前 回复

from glob import glob
##假设所有的文件都放在D盘file文件夹中
namelist = glob(r'D:\file*.jpeg')

数据是按字母排序的,如果你要实现13_left.jpg, 14_left.jpg.....13_right.jpg, 14_right.jpg这样的顺序,就得写个排序方法做排序。

import os

def compare(x, y):
    xparts = x.split('_')
    yparts = y.split('_')
    if len(xparts) > 1 and len(yparts) > 1:
        if xparts[1] == yparts[1]:
            try:
                return cmp(int(xparts[0]),int(yparts[0]))
            except:
                pass
            return cmp(xparts[0], yparts[0])
        else:
            return cmp(xparts[1], yparts[1])
    else:
        return cmp(x, y)

items = os.listdir('./tmp')
print items
items.sort(compare)
print items

输出:
['10_right.jpg', '11_right.jpg', '1_left.jpg', '1_right.jpg', '20_left.jpg', '2_left.jpg', '2_right.jpg']
['1_left.jpg', '2_left.jpg', '20_left.jpg', '1_right.jpg', '2_right.jpg', '10_right.jpg', '11_right.jpg']

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题