Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 18, 2017 15:53:18

artisstm
Зарегистрирован: 2017-12-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с сортировкой

Здравствуйте, если хотите немного ужастиков к вечеру, то вот мой код:

 import re
from collections import defaultdict
from ldap3 import Server, Connection, AUTO_BIND_NO_TLS, SUBTREE
open("C:\ldap\ldap.html", "w")# Очищаю предыдущий вариант файла (или удаляю файл, фиг его знает, надо проверить)
# Заполняю HTML
with open("C:\ldap\ldap.html", "a") as file:
    file.write(
        '<html>\n<head>\n<meta charset="windows-1251" />\n<title></title>\n<meta name="keywords" content="" />'
        '\n<meta name="description" content="" />\n<link href="style.css" rel="stylesheet">\n</head>\n<body>\n<style>\np\n{\nborder: 1px solid black;\npadding: 10px;\nfont: 12pt/10pt sans-serif;\n}\n</style>\n<div class="wrapper">\n<header class="header">\n<center>Внутренние номера</center>\n</header>'
        '\n<div class="middle">\n'
        '\n')
    file.close()
def get_ldap_info1(officeselector):  # Конект к AD, получение данных и запись их в словарь
    with Connection(Server('айпи', port=389, use_ssl=False),
                    auto_bind=AUTO_BIND_NO_TLS,
                    user='логин', password='пароль') as c:
        if officeselector == 'OU=Офис1':
            a = 'OU=Офис1'
        elif officeselector == 'OU=Офис2':
            a = 'OU=Офис2'
        elif officeselector == 'OU=Офис3':
            a = 'OU=Офис3'
        elif officeselector == 'OU=Офис4':
            a = 'OU=Офис4'
        c.search(search_base=a + ',OU=ОУ,DC=corp,DC=ОУ,DC=ru',
                     search_filter='(&(objectClass=user))',
                     search_scope=SUBTREE,
                     attributes=['name', 'telephoneNumber'],
                     get_operational_attributes=True)
        defdict = defaultdict(list)  # Создаю словарь списков
        for a in range(len(c.response)):  # получаю значения и заполняю словарь
            uname = str(c.response[a]['attributes']['name'])
            uphone = str(c.response[a]['attributes']['telephoneNumber'])
            key = [uphone]
            val = [uname]
            for i in range(len(val)):  # Заполняю словарь
                if key[i] != '[]': # Если номер (ключ) пустой не пустой, то добавляю в словарь
                    defdict[key[i]].append((val[i]))
    return defdict
def writephone(a,officeselector):
    if officeselector == 1:
        officenumber = '1'
    elif officeselector == 2:
        officenumber = '2'
    elif officeselector == 3:
        officenumber = '3'
    elif officeselector == 4:
        officenumber = '4'
    with open("C:\ldap\ldap.html", "a") as file:
        file.write(
            '\n<div class="container">\n<main class="content'+officenumber+'">\n<center>'+'Офис '+officenumber+'</center>\n</main>\n</div>\n<aside class="right-sidebar'+officenumber+'">\n<center>Номер</center>')
        file.close()
    for k in a.keys():
        with open("C:\ldap\ldap.html", "a") as file:
            file.write('<p align="left">'+k.strip('[]')+'\n</p>')
            file.close()
    with open("C:\ldap\ldap.html", "a") as file:
        file.write('\n</aside>\n')
        file.close()
def writename(a, officeselector):
    if officeselector == 1:
        officenumber = '1'
        writephone(get_ldap_info1('OU=Офис1'), 1)
    elif officeselector == 2:
        officenumber = '2'
        writephone(get_ldap_info1('OU=Офис2'), 2)
    elif officeselector == 3:
        officenumber = '3'
        writephone(get_ldap_info1('OU=Офис3'), 3)
    elif officeselector == 4:
        officenumber = '4'
        writephone(get_ldap_info1('OU=Офис4'), 4)
    with open("C:\ldap\ldap.html", "a") as file:
        file.write(
            '\n<aside class="left-sidebar'+officenumber+'">\n<center>Имя</center>\n')
        file.close()
    for k in a.keys():
        fr = ' '.join(a[k])
        lb = re.sub(r'\[\d+\]', '', fr)  # Убираю квадратные скобки (регулярное выражение)
        with open("C:\ldap\ldap.html", "a") as file:
            file.write('<p align="left">' + lb + '\n</p>')
            file.close()
    with open("C:\ldap\ldap.html", "a") as file:
        file.write('\n</aside>\n')
        file.close()
writename(get_ldap_info1('OU=Офис1'), 1)
writename(get_ldap_info1('OU=Офис2'), 2)
writename(get_ldap_info1('OU=Офис3'), 3)
writename(get_ldap_info1('OU=Офис4'), 4)
with open("C:\ldap\ldap.html", "a") as file:
    file.write(
        '</div>\n</div>\n</body>\n</html>')
    file.close()
У меня получается на выходе HTML со списком имен и номерами
Список этот хранится в словаре, я хочу выводить его в алфавитном порядке (имена)
Сам словарь, как я понял отсортировать невозможно
Как мне хранить этот список в отсортированном виде?
Я так понимаю мне надо в корни переделывать вывод и хранение?
Это моя первая попытка программировать, за исключением вывода таблицы умножения на java ))

Отредактировано artisstm (Дек. 18, 2017 15:54:06)

Офлайн

#2 Дек. 21, 2017 15:23:35

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Помогите с сортировкой

artisstm
open(“C:\ldap\ldap.html”, “w”)# Очищаю предыдущий вариант файла (или удаляю файл, фиг его знает, надо проверить) # Заполняю HTML with open(“C:\ldap\ldap.html”, “a”) as file:
Смысл? Флаг A - добавить, W - переписать или записать. Если бы ты в своем with open… написал флаг W, то все внутри бы стерлось и записалось бы новое.

Нет. Мой вариант:
 spisok = {...}  # твой список
sorted_list = sorted([x for x in spisok.keys()])
keys = {i: spisok[i] for i in sorted_list}



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#3 Дек. 22, 2017 12:53:01

artisstm
Зарегистрирован: 2017-12-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с сортировкой

Спасибо за подсказку, список сделал двумерным массивом, код уменьшился раза в 2))

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version