20

我正在使用目录中的文件填充 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)

两者都导致同样的事情。

4

2 回答 2

27

os.listdir不保证目录内容的任何顺序。如果您希望对项目进行排序,只需使用内置函数对它们进行排序(必要时sorted使用适当的函数)。key

于 2012-10-29T12:55:14.313 回答
18

试试这个。

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
于 2012-10-29T12:57:28.127 回答