Zip элементы из двух списков, которые имеют одинаковое имя файла? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть два списка: это:

список1 (имеет больше элементов)

['C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp',
 'C:\\Users\\user\\Desktop\\prog1\\merge\\ASTI\\ASTI.shp',
 'C:\\Users\\user\\Desktop\\prog1\\merge\\ASTO\\ASTO.shp']

и это:

список2 (имеет больше элементов)

['C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp',
 'C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp',
 'C:\\Users\\user\\Desktop\\programs\\merge\\AWE\\AWE.shp',  #THIS IS EXTRA
 'C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp']

Как обеспечить совпадение пар с соответствующим именем в другом списке после почтового индекса?

Может быть, мы сопоставим их с предыдущей папкой?Как:

if list1[0].split('\\')[-2] == list2[0].split('\\')[-2]:
      final = [(f,s) for f,s in zip(list1,list2)]
      final

хотел конечный результат:

[('C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp',
  'C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp'),etc..]

1 Ответ

0 голосов
/ 20 ноября 2018

Я бы просто сгруппировал файлы с collections.defaultdict(), а затем вывел бы пары длины 2 в отдельный список.

Демо-версия:

from os.path import basename
from collections import defaultdict
from pprint import pprint

f1 = [
    "C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp",
    "C:\\Users\\user\\Desktop\\prog1\\merge\\ASTI\\ASTI.shp",
    "C:\\Users\\user\\Desktop\\prog1\\merge\\ASTO\\ASTO.shp",
]

f2 = [
    "C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp",
    "C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp",
    "C:\\Users\\user\\Desktop\\programs\\merge\\AWE\\AWE.shp",  # THIS IS EXTRA
    "C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp",
]

files = defaultdict(list)
for path in f1 + f2:
    filename = path.split('\\')[-1]
    files[filename].append(path)

pairs = [tuple(v) for k, v in files.items() if len(v) == 2]
pprint(pairs)

Выход:

[('C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp',
  'C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp'),
 ('C:\\Users\\user\\Desktop\\prog1\\merge\\ASTI\\ASTI.shp',
  'C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp'),
 ('C:\\Users\\user\\Desktop\\prog1\\merge\\ASTO\\ASTO.shp',
  'C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp')]

Примечание: Использование os.path.basename() для извлечения имени файла из путей Windows будет работать только в Windows. Он просто ничего не будет делать в среде Unix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...