我在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
答案 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中)。如果不更改目录内容(即重复调用将返回相同的顺序),它可能会在同一个目录(同一文件系统上的)上保持稳定,但顺序不一定字母。
如果你想拥有一个有序的文件名列表,你必须构建列表然后自己排序。