Частичное совпадение между двумя списками Python, один список точно присутствует в другом с несколькими дополнительными символами в Python - PullRequest
2 голосов
/ 10 июня 2019

У меня есть два списка.

files = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf', '344D4Q_v1.8.ppt'. '33ADNL_v3.0.pdf']

baseline_documents  = ['26ZJ35', '2EPWW9']

Я хочу найти все совпадения в списке list1, который имеет точное совпадение строки из списка 2, и добавить в новый список.

Требуется вывод:

list3 = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf']

Код до сих пор:

import csv
import os
import re
metadata = []
with open('D:/meta_demo.csv', 'r') as f:
    rows = csv.reader(f)
    for i in rows:
        metadata.append(i)
        #print(i)    
baseline_documents = metadata[1:20]
DIR = 'D:/demo_files/'
files = [i for i in os.listdir(r"D:\demo_files")]

list3 = []
for i in files:
    if re.search(r"[^_]*", i) in baseline_documents:
        list3.append(files)

list3 = [i for i in baseline_documents if re.search(r"[^_]*", i) in files]

1 Ответ

3 голосов
/ 10 июня 2019

Вы можете использовать str.startswith

Пример:

files = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf', '344D4Q_v1.8.ppt', '33ADNL_v3.0.pdf']
baseline_documents  = ['26ZJ35', '2EPWW9']
result = [i for i in files if i.startswith(tuple(baseline_documents))]
print(result)

Если вам нужно регулярное выражение, используйте re.match.

Пример:

import re

files = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf', '344D4Q_v1.8.ppt', '33ADNL_v3.0.pdf']
baseline_documents  = ['26ZJ35', '2EPWW9']
pattern = re.compile("|".join(baseline_documents))

result = [i for i in files if pattern.match(i)]
print(result)

Выход:

['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...