разделить на несколько символов в строке - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть список имен файлов, которые мне нужно отсортировать на основе раздела в строке. Тем не менее, это работает, только если я сделаю расширение файла частью моего сортировочного словаря. Я хочу, чтобы это работало, если файл является .jpg или .png, поэтому я пытаюсь разделить и на «_», и на «.» символ.

sorting = ['FRONT', 'BACK', 'LEFT', 'RIGHT', 'INGREDIENTS', 'INSTRUCTIONS', 'INFO', 'NUTRITION', 'PRODUCT']

filelist = ['3006345_2234661_ENG_PRODUCT.jpg', '3006345_2234661_ENG_FRONT.jpg', '3006345_2234661_ENG_LEFT.jpg', '3006345_2234661_ENG_RIGHT.jpg', '3006345_2234661_ENG_BACK.jpg', '3006345_2234661_ENG_INGREDIENTS.jpg', '3006345_2234661_ENG_NUTRITION.jpg', '3006345_2234661_ENG_INSTRUCTIONS.jpg', '3006345_2234661_ENG_INFO.jpg']

sort = sorted(filelist, key = lambda x : sorting.index(x.re.split('_|.')[3]))

print(sort)

Возвращает ошибку «AttributeError: у объекта 'str' нет атрибута 're'"

Что мне нужно сделать, чтобы разделить и _, и. когда разбиваешь мои строки для сортировки? Я хочу использовать разделение только для сортировки, а не для повторного формирования строк.

1 Ответ

5 голосов
/ 15 февраля 2020

Вот фиксированный код:

sorted_output = sorted(filelist,key=lambda x: sorting.index(re.split(r'_|\.',x)[3])) 

Строка, введенная в re.split(), должна быть передана как второй аргумент функции; Вы не вызываете re.split() в строке. Первый аргумент - это само регулярное выражение, которое вы исправили.

Также: вам нужно экранировать . с \, потому что точка или точка - это специальный символ в регулярных выражениях, который соответствует все.

Вывод:

In [13]: sorted(filelist,key=lambda x: sorting.index(re.split(r'_|\.',x)[3]))                       
Out[13]: 
['3006345_2234661_ENG_FRONT.jpg',
 '3006345_2234661_ENG_BACK.jpg',
 '3006345_2234661_ENG_LEFT.jpg',
 '3006345_2234661_ENG_RIGHT.jpg',
 '3006345_2234661_ENG_INGREDIENTS.jpg',
 '3006345_2234661_ENG_INSTRUCTIONS.jpg',
 '3006345_2234661_ENG_INFO.jpg',
 '3006345_2234661_ENG_NUTRITION.jpg',
 '3006345_2234661_ENG_PRODUCT.jpg']

Редактировать: как упоминается @Todd в комментариях, если вы хотите дополнительно убедиться, что строки отсортированы по нумерации c часть после происходит первая сортировка, затем используйте:

sorted(filelist,key=lambda x: [sorting.index(re.split(r'_|\.',x)[3]),x])
...