Поиск, если число находится в строке, которая является путем - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть список, содержащий идентификационные номера, например:

cedulas = [344823, 1234567, 12534, 16537]

, и у меня есть список со всеми путями поиска изображений, таких как:

img_path = [
'/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg',
 '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]

это мой код:

    for cedula in cedulas:
    for path in im_path:
        if cedula in path:
            print 'Se encontro la imagen {} que corresponde a la cedula {}'.format(path, cedula])

проблема в том, что код находит последовательность, а не точное число.например:

, если ID == 344823, с кодом выше, вывод будет [True, True].

Но я хочу найти точное совпадение числа.Таким образом, результат должен быть: [True, False]

Я знаю, что это может быть с re, но я не могу сделать это.Спасибо за помощь, и мне жаль, если это немного сбивает с толку.

Ответы [ 4 ]

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

Я думаю, что это ваше желание.Это соответствует только точным числам в list.Более того, его сложность не меньше, если длина символа каждого числа определяется как len(num), Ω( len(num) * n^2 ).Я думаю, что для вашей цели должен быть лучший дизайн.

import re


list = [344823, 1234567, 12534, 16537]

list_img = [
'/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg',
 '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]


for number in list:
    for path in list_img:
        token = str(number)
        if re.search(r'\b' + token + r'\b', path):
            print(path)
0 голосов
/ 06 декабря 2018

Не вызывайте list список:

ids = [344823, 1234567, 12534, 16537]
paths = ['/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg', '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]

result_set = {}

for id in ids:
    result_set[id] = [len(re.findall('\D%s\D'%str(id), mypath))>0 for mypath in paths]

Даст {344823: [True, False]...}

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

Вы можете построить регулярное выражение на основе идентификаторов и выполнить поиск по нему:

import re
l = [344823, 1234567, 12534, 16537]
img_path = [
 '/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg',
 '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]
r = "(" + '|'.join(map(lambda x : str(x),list)) + ")-"
# => '(344823|1234567|12534|16537)-'
filter(lambda p: re.search(r, p) , img_path)
# ['/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg']

Регулярное выражение находит любые числа в списке, за которыми следует -, например, (12|16)-.

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

Вы можете попробовать шаблон регулярного выражения следующим образом:

YOUR_NUMBER = 344823
pattern = '\D(YOUR_NUMBER)\D'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...