glob.glob()的返回值是按什么顺序排列的?
我写了以下的Python代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, glob
path = '/home/my/path'
for infile in glob.glob( os.path.join(path, '*.png') ):
print infile
现在我得到了这个结果:
/home/my/path/output0352.png
/home/my/path/output0005.png
/home/my/path/output0137.png
/home/my/path/output0202.png
/home/my/path/output0023.png
/home/my/path/output0048.png
/home/my/path/output0069.png
/home/my/path/output0246.png
/home/my/path/output0071.png
/home/my/path/output0402.png
/home/my/path/output0230.png
/home/my/path/output0182.png
/home/my/path/output0121.png
/home/my/path/output0104.png
/home/my/path/output0219.png
/home/my/path/output0226.png
/home/my/path/output0215.png
/home/my/path/output0266.png
/home/my/path/output0347.png
/home/my/path/output0295.png
/home/my/path/output0131.png
/home/my/path/output0208.png
/home/my/path/output0194.png
这个结果是按什么顺序排列的呢?
为了说明一下:我对排序本身不感兴趣——我知道有sorted
这个方法。我想知道默认情况下它是以什么顺序出现的。
这可能对你有帮助,我的ls -l输出是:
-rw-r--r-- 1 moose moose 627669 2011-07-17 17:26 output0005.png
-rw-r--r-- 1 moose moose 596417 2011-07-17 17:26 output0023.png
-rw-r--r-- 1 moose moose 543639 2011-07-17 17:26 output0048.png
-rw-r--r-- 1 moose moose 535384 2011-07-17 17:27 output0069.png
-rw-r--r-- 1 moose moose 543216 2011-07-17 17:27 output0071.png
-rw-r--r-- 1 moose moose 561776 2011-07-17 17:27 output0104.png
-rw-r--r-- 1 moose moose 501865 2011-07-17 17:27 output0121.png
-rw-r--r-- 1 moose moose 547144 2011-07-17 17:27 output0131.png
-rw-r--r-- 1 moose moose 530596 2011-07-17 17:27 output0137.png
-rw-r--r-- 1 moose moose 532567 2011-07-17 17:27 output0182.png
-rw-r--r-- 1 moose moose 553562 2011-07-17 17:27 output0194.png
-rw-r--r-- 1 moose moose 574065 2011-07-17 17:27 output0202.png
-rw-r--r-- 1 moose moose 552197 2011-07-17 17:27 output0208.png
-rw-r--r-- 1 moose moose 559809 2011-07-17 17:27 output0215.png
-rw-r--r-- 1 moose moose 549046 2011-07-17 17:27 output0219.png
-rw-r--r-- 1 moose moose 566661 2011-07-17 17:27 output0226.png
-rw-r--r-- 1 moose moose 561678 2011-07-17 17:27 output0246.png
-rw-r--r-- 1 moose moose 525550 2011-07-17 17:27 output0266.png
-rw-r--r-- 1 moose moose 565715 2011-07-17 17:27 output0295.png
-rw-r--r-- 1 moose moose 568381 2011-07-17 17:28 output0347.png
-rw-r--r-- 1 moose moose 532768 2011-07-17 17:28 output0352.png
-rw-r--r-- 1 moose moose 535818 2011-07-17 17:28 output0402.png
它不是按文件名或大小来排序的。
12 个回答
78
通过查看glob.glob
的源代码,你会发现它内部调用了os.listdir
,这里有相关的描述:
http://docs.python.org/library/os.html?highlight=os.listdir#os.listdir
关键句子:
os.listdir(path='.')
这个函数会返回一个列表,里面包含了指定路径下所有文件和文件夹的名字。这个列表的顺序是随机的。即使目录里有特殊的条目'.'
和'..'
,它们也不会被包含在返回的列表里。
随机顺序。
622
顺序是随意的,但你可以自己排序
如果你想按名字排序:
sorted(glob.glob('*.png'))
按修改时间排序:
import os
sorted(glob.glob('*.png'), key=os.path.getmtime)
按大小排序:
import os
sorted(glob.glob('*.png'), key=os.path.getsize)
等等。
161
这可能根本没有排序,而是按照文件系统中条目出现的顺序来显示的,也就是说,你用 ls -U
命令看到的顺序。(至少在我的电脑上,这个顺序和列出 glob
匹配项的顺序是一样的。)