Проверка правильности пар из zip? - PullRequest
0 голосов
/ 05 сентября 2018

Мне нужен ваш совет по этой проблеме.

Я собрал то, что мне нужно в этих двух списках: simpl2, astik, с этим кодом:

simpl2 = [] 
astik = []
for path, subdirs, files in os.walk(rootfolder):
    for name in files:
        if 'sim2.shp' == name:
            simpl2.append(os.path.join(path, name))
        elif 'ASTIK.shp' == name:
            astik.append(os.path.join(path, name))

Приведенный выше код выполняет поиск в корневой папке, содержащей папки: v1.v2,v3,v4
Итак, используя это:

for i,j in zip(simpl2,astik): 
    print(i,j)

дает это:

СОДЕРЖАНИЕ

C:\Users\user\Desktop\pl\v1\exported\sim2.shp C:\Users\user\Desktop\pl\v1\ASTIK\ASTIK.shp
C:\Users\user\Desktop\pl\v2\exported\sim2.shp C:\Users\user\Desktop\pl\v4\ASTIK\ASTIK.shp

Вопрос

Как убедиться, что пары будут из одной и той же папки (например, первая строка, которая поступает как из v1, а если нет (например, вторая строка, где одна из v2, а другая из * 1026) *) чтобы они вообще не имели пары.

Это должно произойти, потому что они будут использоваться позже, и они должны быть правильными парами, в противном случае у меня есть готовый код за исключением тех, у которых нет пары, поэтому проблема заключается в том, как исправить эту часть, которая описана ранее.

Объяснение

Корневая папка:

C:\Users\user\Desktop\pl

после этого pl появляется папка v1, v2, v3, v4. В каждой из этих папок есть несколько файлов, которые одинаковы для всех 4 папок. Разница лишь в том, что некоторые будут пустыми. Я просто хочу проверить, созданы ли правильные пары одинаковых v в списках.

1 Ответ

0 голосов
/ 05 сентября 2018

Хорошо, увидев ваше обновление, возможно, вас заинтересует что-то вроде этого:

import os

simpl2 = []
astik = []

rootfolder = r'C:\Users\user\Desktop\pl'
subfolders = [os.path.join(rootfolder, i) for i in ['v1','v2','v3','v4']]

for folder in subfolders:

    temp = {name: os.path.join(path, name) 
            for path, subdirs, files in os.walk(folder)
            for name in files
            if name in ['sim2.shp', 'ASTIK.shp']}

    if len(temp) == 2:
        simpl2.append(temp['sim2.shp'])
        astik.append(temp['ASTIK.shp'])

СТАРЫЙ КОД

Но ... если это ваша конечная цель, вы также можете просто сохранить пути. Если оба файла находятся в пути, то вы знаете, что путь содержит оба файла. Затем вы можете легко создавать конечные пути с помощью os.path.join (), когда это необходимо.

paths = []
for path, subdirs, files in os.walk(rootfolder):
    if ('sim2.shp' in files) and ('ASTIK.shp' in files):
        paths.append(path)

Или более компактный формат:

lookfor = ['sim2.shp','ASTIK.shp']
paths = [p for p,s,f in os.walk(rootfolder) if all(i in f for i in lookfor)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...