Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2024 18:21:28

usmesn
Зарегистрирован: 2020-04-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Пользовател и группы AD

всем привет.
есть некий словарь следующего плана - пользователи и список их групп, но необходимо оставить только название группы(все что после CN= и до ,) без полного пути к ней.

 from re import match
users={'user1':
            ['CN=A,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
            'CN=B,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
             'CN=C,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'],
       'user2':
             ['CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
            'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'],
     'user3':
        ['CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
         'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y']
       }
new_val=[]
for k,v in users.items():
    for groups in v:
        groups=match(r"CN=([A-Za-z\-\_ а-яА-Я0-9]*)",groups).group(1)
        new_val.append(groups)
    users.update({k:new_val})
    new_val.clear()
for i,v in users.items():
    print(i,v)

Написал такой код, но он не работает, так как нужно.
Конечный результат должен быть такй:
 {'user1':['A','B','C'], 'user2':['D','E'],'user3':['D','E'']}
Не совсем понимаю почему вот это new_val.clear() дает такой результат(регулярка вроде нормально отрабатывает, на самом деле имя группы может содержать все указанные символы)
 {'user1': [], 'user2': [], 'user3': []}

Отредактировано usmesn (Окт. 23, 2024 18:23:31)

Офлайн

#2 Окт. 24, 2024 08:58:20

usmesn
Зарегистрирован: 2020-04-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Пользовател и группы AD

usmesn
всем привет.есть некий словарь следующего плана - пользователи и список их групп, но необходимо оставить только название группы(все что после CN= и до ,) без полного пути к ней.
вроде разобрался с данной проблемой - все дело в филосифии ссылочного типа данных к которому относится список и операцией new_val.clear() происходит очистка дачнного списка, который ссылается как раз на ныжные значения в словаре.Как вариает, содавать каждый раз новый список(новую ссылку но объект) после первого цикла for:
 for k,v in users.items():
    new_val = []
    for groups in v:
        groups=match(r"CN=([A-Za-z\-\_ а-яА-Я0-9]*)",groups).group(1)
        new_val.append(groups)
    users.update({k:new_val})

Поправьте меня, если что-то не так.

Отредактировано usmesn (Окт. 25, 2024 08:52:24)

Офлайн

#3 Окт. 27, 2024 08:39:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9842
Репутация: +  853  -
Профиль   Отправить e-mail  

Пользовател и группы AD

usmesn
есть некий словарь следующего плана - пользователи и список их групп, но необходимо оставить только название группы(все что после CN= и до ,) без полного пути к ней.
  
users = {
    'user1': [
        'CN=A,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
        'CN=B,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
        'CN=C,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'
    ],
    'user2': [
        'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
        'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'
    ],
    'user3': [
        'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
        'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'
    ]
}
Конечный результат должен быть такй:
  
{'user1': ['A','B','C'],
 'user2': ['D','E'],
 'user3': ['D','E']}

  
>>> import re
>>> 
>>> users = {
...     'user1': [
...         'CN=A,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
...         'CN=B,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
...         'CN=C,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'
...     ],
...     'user2': [
...         'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
...         'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'
...     ],
...     'user3': [
...         'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y',
...         'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'
...     ]
... }
>>> 
>>> out = {k: [re.search(r'^CN=([^,]+)', i).group(1) for i in v]
...        for k, v in users.items()}
>>> 
>>> out
{'user1': ['A', 'B', 'C'], 'user2': ['D', 'E'], 'user3': ['D', 'E']}
>>>



Отредактировано py.user.next (Окт. 27, 2024 23:07:29)

Офлайн

#4 Окт. 28, 2024 17:35:50

usmesn
Зарегистрирован: 2020-04-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Пользовател и группы AD

py.user.next
благодарю за твой вариант решения данной задачи(я ждал тебя))

Отредактировано usmesn (Окт. 28, 2024 17:36:10)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version