Python перечисляет директории в другом порядке в зависимости от платформы - PullRequest
10 голосов
/ 14 апреля 2011

Я пишу и тестирую код на XPsp3 с python 2.7.Я бегу код на 2003 сервере с 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) os.walk по всем каталогам в d: \ ssptemp

2) найти все файлы с 'IWPCPatch' в имени файла

3) проверить содержимое файла для 'IWPCPatchFinal_a.wsf'

4) Если содержимое равно 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 ]

14 голосов
/ 16 июля 2012
for path, dirs, files in os.walk('d:\ssptemp'):

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

    print "parsing dir(s)"
    # ...
13 голосов
/ 14 апреля 2011

Порядок каталогов в os.walk не обязательно алфавитный (я думаю, что на самом деле это зависит от того, как они хранятся в директиве файловой системы).Скорее всего, он будет стабильным в том же каталоге ( в той же файловой системе ), если вы не измените содержимое каталога (т. Е. Повторные вызовы будут возвращать один и тот же порядок), но порядок не обязательно должен быть алфавитным.

Если вы хотите иметь упорядоченный список имен файлов, вам придется создать список, а затем отсортировать его самостоятельно.

...