python根据平台以不同的顺序列出dirs

时间:2011-04-14 18:02:39

标签: python os.walk

我在XPsp3 w / python 2.7上编写和测试代码。我在2003服务器w / python 2.7上运行代码。我的目录结构看起来像这样

d:\ssptemp
d:\ssptemp\ssp9-1
d:\ssptemp\ssp9-2
d:\ssptemp\ssp9-3
d:\ssptemp\ssp9-4
d:\ssptemp\ssp10-1    
d:\ssptemp\ssp10-2
d:\ssptemp\ssp10-3
d:\ssptemp\ssp10-4

在每个目录中,有一个或多个文件将“IWPCPatch”作为文件名的一部分。

在其中一个文件中(每个目录中有一个),会有一行'IWPCPatchFinal_a.wsf'

我的工作是

1)在d:\ ssptemp

下穿越所有目标

2)在文件名

中找到所有带有'IWPCPatch'的文件

3)检查文件内容'IWPCPatchFinal_a.wsf'

4)如果contents为true,我将该文件的路径添加到列表中。

我的问题是在我的XP机器上运行正常。如果我打印出列表的结果,我会按照上面列出的顺序获得几个项目。

当我将它移动到服务器2003机器时,我以不同的顺序获得相同的内容。它来自ssp10-X,然后是ssp9-X。这导致我在程序中的不同区域出现问题。

我可以从输出中看到它以错误的顺序开始os.walk,但我不知道为什么会发生这种情况。

import os
import fileinput

print "--createChain--"

listOfFiles = []
for path, dirs, files in os.walk('d:\ssptemp'):

    print "parsing dir(s)"
    for file in files:
        newFile = os.path.join(path,file)
        if newFile.find('IWPCPatch') >= 0:
            for line in fileinput.FileInput(newFile):
                if "IWPCPatchFinal_a.wsf" in line:
                    listOfFiles.append(newFile)                            
                    print "Added", newFile

for item in listOfFiles:
    print "list item", item

2 个答案:

答案 0 :(得分:14)

for path, dirs, files in os.walk('d:\ssptemp'):

    # sort dirs and files
    dirs.sort()
    files.sort()

    print "parsing dir(s)"
    # ...

答案 1 :(得分:13)

os.walk中的目录顺序不一定是按字母顺序排列的(我认为它实际上取决于它们如何存储在文件系统的dirent中)。如果不更改目录内容(即重复调用将返回相同的顺序),它可能会在同一个目录(同一文件系统上的)上保持稳定,但顺序不一定字母。

如果你想拥有一个有序的文件名列表,你必须构建列表然后自己排序。