我正在使用目录中的文件填充tkinter列表框。文件的名称都以01 - n中的数字开头。当我查看目录中的文件时,它们按数字顺序出现。但是,当我将文件加载到列表框中时,它们不是按数字顺序排序的。我可以更改前导数字,但相同的文件将始终显示在同一位置。
我只是使用简化的项目名称来保持简单。它仍然表明它们不是按字母顺序或数字顺序排序的。
列表应在我的列表框中显示如下
01. itemA
02. itemB
03. itemC
04. itemD
但它看起来像是:
01. itemA
04. itemD
02. itemB
03. itemC
我可以更改前导数字,但文件将始终以相同的顺序(按名称而不是数字)填充。奇怪的是,它甚至不是按字母顺序排列的。
我用过这个
i = 0
for filename in os.listdir(directory):
fileList.insert(i, filename)
i = i + 1
这个
for filename in os.listdir(directory):
fileList.insert(END, filename)
两者都会产生相同的结果。
答案 0 :(得分:21)
os.listdir
不保证对目录内容的任何排序。如果您希望对项目进行排序,只需使用内置sorted
函数对其进行排序(如果需要,使用适当的key
函数)。
答案 1 :(得分:16)
试试这个。
for index, filename in enumerate(sorted(os.listdir(directory))):
print '{0:02d}. {1}'.format(index + 1, filename)
如果该号码是文件名的一部分,请使用@ FabienAndre的评论。
for filename in sorted(os.listdir(directory)):
print filename