Сопоставить элементы списков частично похожими строками |Python 3.x - PullRequest
0 голосов
/ 18 декабря 2018

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

Цель состоит в том, чтобы синхронизировать имена файлов из целевого каталога с именами файлов в исходном каталоге.Поскольку имена файлов содержат частично одинаковую строку, должна быть возможность ссылаться на них.


Каталог 1: «random-original.ext» |Каталог 2: «original.ext»

Синхронизация со сценарием:

Каталог 1: «random-original.ext» |Каталог 2: "random-original.ext"


Здесь "S03-ST02 ..." - просто пример случайных строк.Единственное, что будет одинаковым в обоих файлах - это последняя часть, включающая расширение файла.Приведенные ниже имена файлов являются лишь примерами - после этого они должны работать со всеми видами имен.

Ввод:

sourceFiles  = [S03-ST02-T04-VID004.mov, S01-ST01-T01-AV0203.abc, S05-ST02-T01-MOV0014.mp4]
targetFiles  = [AV0203.abc, MOV0014.mp4, VID0004.mov]

Выходная переменная 1

sourceFiles = [S01-ST01-T01-AV0203.abc, S05-ST02-T01-MOV0014.mp4, S03-ST02-T04-VID0004.mov]
targetFiles  = [AV0203.abc, MOV0014.mp4, VID0004.mov]

Таким образом, я могу ссылаться на один и тот же файл (с разными именами), например, с помощью цикла for:

for i in len(sourceFiles):
   sourceFiles[i]
   targetFiles[i]

Выходная переменная 2

combFileList = [(S01-ST01-T01-AV0203.abc, AV0203.abc), (S05-ST02-T01-MOV0014.mp4, MOV0014.mp4), (S03-ST02-T04-VID0004.mov, VID0004.mov)]

И ссылканапример, такой же файл, как этот:

for i in len(combFileList):
   combFileList[i][0]
   combFileList[i][1]
   ...

Как бы я подошел к этому?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

как то так

for targetFile in targetFiles:
    for sourceFile in sourceFiles:
        if sourceFile.endswith(targetFile):
            do_something(sourceFile, targetFile)
0 голосов
/ 18 декабря 2018

Вы можете использовать next здесь, внутри списка

sourceFiles  = ['S03-ST02-T04-VID0004.mov', 'S01-ST01-T01-AV0203.abc', 'S05-ST02-T01-MOV0014.mp4']
targetFiles  = ['AV0203.abc', 'MOV0014.mp4', 'VID0004.mov']

res = [next((x for x in targetFiles if y.endswith(x)), 'N/A') for y in sourceFiles]

, который производит

print(res)  # -> ['VID0004.mov', 'AV0203.abc', 'MOV0014.mp4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...