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

2024-04-28 19:34:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在XPsp3 w/python 2.7上编写和测试代码。我在2003服务器w/python 2.7上运行代码。我的dir结构会像这样

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)os.walk-cross-all-dirs under d:\ssptemp

2)查找文件名中包含“IWPCPatch”的所有文件

3)检查“IWPCPatchFinal_a.wsf”文件的内容

4)如果内容为真,则将该文件的路径添加到列表中。

我的问题是在我的XP机器上它工作得很好。如果我打印出列表的结果,我会按照上面列出的顺序得到几个项目。

当我把它移到server 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

Tags: 文件in内容for顺序oswalkprint
2条回答
for path, dirs, files in os.walk('d:\ssptemp'):

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

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

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

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

相关问题 更多 >