Запись результатов из os.walk и заканчивается в определенном месте массива

Я пытаюсь найти серию папок / подпапок, используя фильтры, а затем записать результаты. Это работает, если результаты записываются в один и тот же массив, но не может понять, как направить совпадения в определенные массивы. Спасибо за любые предложения.

matchlist = [ ['*.csv'], ['*.txt'], ['*.jpg'], ['*.png'] ]
filearray = [ [],[],[],[] ]
for root, dirs, files in os.walk(folderpath):
    for file in files:
        for entry in matchlist:
            if file.endswith(entry):
                 filearray[TheAppropriateSubArray].append(os.path.join(root, file))

2 ответа

Решение

Ваш список матчей должен быть:

matchlist = ['.csv', '.txt', '.jpg', '.png']

Затем измените:

    for entry in matchlist:
        if file.endswith(entry):
             filearray[TheAppropriateSubArray].append(os.path.join(root, file))

Для того, чтобы:

    for i, entry in enumerate(matchlist):
        if file.endswith(entry):
             filearray[i].append(os.path.join(root, file))

Рассмотрите возможность использования словаря:

filearrays = { '.csv':[],'.txt':[],'.jpg':[],'.png':[] }
for root, dirs, files in os.walk(folderpath):
    for file in files:
        filename, fileext = os.path.splitext(file)
        if fileext in filearrays:
            filearrays[fileext].append(os.path.join(root, file))
Другие вопросы по тегам