• Возможно реализовать пересылку сообщений из VK в Telegram?

    lxstvayne
    @lxstvayne
    Люблю Python
    Да, можно. Библиотеки можно самые разные взять. Для telegram: pyrogram, telethon. Для вк: vk_api, vk_maria, vkwave, vkbottle.
    Ответ написан
    1 комментарий
  • Какую библиотеку использовать для парсинга большого количества страниц?

    @Kirill-Gorelov
    С ума с IT
    Да сделай ты уже на хоть чем-то))))

    Ну будет у тебя разница в скорости между инструментами варьироваться час-два.....
    А так я за хардкор. чистый requests.
    Ответ написан
    5 комментариев
  • Для чего используется "@" перед переменными в Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Для того, чтобы вы задали себе этот вопрос и открыли для себя пользу учебников. 61a0da3259ddf867054068.jpeg Целая глава посвящена вопросу!
    spoiler
    Эти жулики в роликах про ботов сами этот вопрос изучили, а вас не учат, а заставляют как обезьянок повторять тупые действия. Так вам и надо, неучи.
    Ответ написан
    Комментировать
  • Как в Python вывести таблицу как в примере?

    Vindicar
    @Vindicar
    RTFM!
    Вывести в консоль?
    Ну я бы подходил к этому так.
    1. Преобразовать все выводимые данные в строки и разбить их по переносам строки.
    2. Определить наибольшую ширину каждого столбца с учётом переносов строки. Для каждой ячейки вычисляем наибольшую ширину строки, потом ищем максимум по столбцу. Можно добавить 1-2 символа как "поля", если надо.
    3. При выводе строки, выводим строки ячеек вместе, используя itertools.zip_longest(). Т.е. сначала первую строку в каждой ячейке, потом вторую, и т.д. Если получили вместо одной из строк None, значит в этой ячейке строки уже закончились - выводим пробелы.
    Ширину вывода каждой ячейки мы знаем из пункта 2, выровнять значение пробелами - тривиально.

    # -*- coding: utf-8 -*-
    import typing as t
    import itertools
    
    def print_table(headers: t.Dict[str, str], data: t.Iterable[t.Dict[str, str]]) -> None:
        keys: t.List[str] = list(headers.keys()) #список ключей в таблице - чтобы сохранять порядок столбцов
        split_data: t.List[t.Dict[str, t.List[str]]] = [] #ячейки, разбитые на строки
        max_widths: t.Dict[str, int] = { key:len(value) for key,value in headers.items() } #ширина каждого столбца в таблице
        for line in data:
            #разбиваем ячейки строки на текстовые строки по \n
            split_line: t.Dict[str, t.List[str]] = { key:value.splitlines() for key,value in line.items() }
            #обновляем ширину столбцов, если надо
            for key in keys:
                new_width = max(map(len, split_line.get(key, [''])))
                if new_width > max_widths[key]:
                    max_widths[key] = new_width
            split_data.append(split_line)
        #выводим заголовки
        for key in keys:
            print(f'{{0:<{max_widths[key]}}}'.format(headers[key]), end='|') #можно вместо | поставить пробел
        print()
        print( '+'.join('-'*v for v in max_widths.values()) + '|') #разделитель заголовка и тела таблицы
        #выводим строки таблицы
        for row in split_data:
            for parts in itertools.zip_longest(*(row[key] for key in keys)):
                #parts - кортеж, где каждый элемент либо строка в очередной ячейке, либо None
                for key,part in zip(keys, parts):
                    #None означает, что в этой ячейке строки текста уже кончились
                    print(f'{{0:<{max_widths[key]}}}'.format(part if part is not None else ''), end='|')
                print()
            print( '+'.join('-'*v for v in max_widths.values())  + '|') #разделитель строк, если надо
    
    data = [
        {'ip':'192.168.0.2', 'model':'DES-3200-26', 'uptime': '3d 12:03:05', 'uplink state': '25: up\n26:up', 'uplink err': '0\n11', 'uplink mcast': '24560\n113'},
        {'ip':'192.168.0.2', 'model':'DES-3200-52', 'uptime': '1d 04:00:15', 'uplink state': '49: up\n50:up\n51:down\n52:down', 'uplink err': '10\n1133\n0\n0', 'uplink mcast': '5497812\n3145\n0\n0'},
    ]
    headers = {'ip': 'IP address', 'model': 'Model', 'uptime': 'Uptime', 'uplink state': 'Uplink state', 'uplink err': 'Uplink errors', 'uplink mcast': 'Uplink M-cast'}
    print_table(headers, data)

    IP address |Model      |Uptime     |Uplink state|Uplink errors|Uplink M-cast|
    -----------+-----------+-----------+------------+-------------+-------------|
    192.168.0.2|DES-3200-26|3d 12:03:05|25: up      |0            |24560        |
               |           |           |26:up       |11           |113          |
    -----------+-----------+-----------+------------+-------------+-------------|
    192.168.0.2|DES-3200-52|1d 04:00:15|49: up      |10           |5497812      |
               |           |           |50:up       |1133         |3145         |
               |           |           |51:down     |0            |0            |
               |           |           |52:down     |0            |0            |
    -----------+-----------+-----------+------------+-------------+-------------|
    Ответ написан
    2 комментария
  • Как сделать сравнение чего-либо в Python?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    Делаете оценку силы команды цифрах, например от 1 до 100, потом сравниваете цифры.
    А сперва - учите питон.
    Ответ написан
    7 комментариев
  • Почему при парсинге страницы отображается не весь контент и как это исправить?

    @Narts
    Там данные подгружаются и обновляются в динамическом режиме
    Гуглите парсинг динамических данных
    Ответ написан
    Комментировать
  • Сколько стоит час веб-разработчика-фрилансера?

    Если хочется настоящей разработки, а не пилить лендинги пачками и интернет магазины, то иди в среднюю или большую компанию джуном. Там тебя старшие всему научат и там не так спешат запустить проект и заработать бабла. там вас познакомят с кучей интересных инструментов, подходов и научат искать общий язык с бизнесом потому что там все запущено и бабло уже зарабатывается. Теперь там делается упор на качество и расширение под нагрузку, а это самое интересное. Потом смените место на стартап и напишите такую махину с нуля. Опять же интересный опыт. Если стартап взлетит, то можно в нем остаться как сто или лид и рефакторить махину уже как большой проект. А фриланс научит только в спешке говнокодить лендинги за копейки и без опытного товарища рядом. самое сложное там - магазин собрать на какой нибудь цмс для магазинов.
    Ответ написан
    Комментировать
  • При запуске python скриптов в jenkins не импортируются библиотеки из site-packages. Как решить проблему?

    @vitaly_il1
    DevOps Consulting
    Лучше всего использовать virtual environment, чтобы не зависеть от инсталляции на хосте.
    Ответ написан
    Комментировать
  • Где нужно вычисление выпукло оболочки?

    LoliDeveloper
    @LoliDeveloper
    Линейная алгебра как смысл жизни
    В играх например. У вас есть очень сложная фигура и для обработки коллизии вы вместо потной обработки всей фигуры обрабатываете только её выпуклую оболочку и экономите ресурсы.
    Обычно ведь как делают. Сначала проверяют коллизии с кубом, в котором лежит ваша фигура, потом выпуклую оболочку, и только потом мельчайшие детали. Это ОЧЕНЬ экономит расчёты.
    Ответ написан
    Комментировать
  • Как сформировать команду Bash?

    @q2digger
    никого не трогаю, починяю примус
    find ./folder/ -name "*.log" -size +10M -mtime -2
    Ответ написан
    2 комментария
  • OpenSSH в Windows 10. По какой причине доступ запрещен?

    @MaxKozlov
    Добрался до компа, напишу уж тут :)
    В логах сервера видно что за проблема - не те права у того самого файлика, что я упоминал в комментарии
    debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file C:/ProgramData/ssh/administrators_authorized_keys.
    Authentication refused.

    При подключении к OpenSSH-серверу, установленному, на win и использовании аутентификации по ключу, необходимо обращать внимание на два момента:
    1. Если пользователь админ - его публичный ключ должен быть указан в C:\ProgramData\ssh\administrators_authorized_keys
    2. Убедиться что владелец файлов *authorized_keys правильный: системных - система, юзерских - юзер, и без лишних доступов.
    Например, установить права для системного можно скопировав их с другого файла:
    $acl = Get-Acl C:\ProgramData\ssh\ssh_host_dsa_key.pub
    Set-Acl -Path C:\ProgramData\ssh\administrators_authorized_keys -Acl $acl

    Ещё в комплекте c GitHub идут специальные скрипты для тех же целей:
    FixHostFilePermissions.ps1
    FixUserFilePermissions.ps1

    Они что-то ещё в реестре вроде бы правят

    Вариант обхода настроек для этого файла -закомментировать в конфигах его упоминание:
    Match Group administrators
           AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
    Но это не рекомендуется

    Ну, и, как замечено в комментариях, необходимо убедиться в правильной кодировке файла
    https://github.com/PowerShell/Win32-OpenSSH/issues...
    Если коротко, то оказалось что кодировкой *authorized_keys по дефолту является UCS-2 LE BOM, вместо ожидаемого UTF-8. После смены кодировки все заработало так как надо.

    Мои лично файлы все в ASCII
    Ответ написан
    4 комментария
  • Как создать бота для не популярного мессенджера на python?

    @twistfire92
    Python backend developer
    ну если нет никаких готовых библиотек для работы с этим месседжером, то надо искать документацию по API этого продукта. Если разработчики вообще API предоставляли какое-либо. И тогда уже через HTTP запросы/ответы работать.
    Ответ написан
    3 комментария
  • Почему возникает данная ошибка при запуске любого скрипта питон?

    Vindicar
    @Vindicar
    RTFM!
    SyntaxError: unexpected character after line continuation character

    У тебя в строке где-то болтается символ \ вне строковой константы.
    Знак деления не перепутал, случаем?
    Ответ написан
    3 комментария
  • Какой рынок программирования НЕ «перегрет»?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Вообще замерзает рынок специалистов уровня сеньор.
    Вакансии висят месяцами и годами.

    Не перегрет рынок уровня мид. Вакансий полно.

    Вот на уровне джуниор - там полно вайтишников, а вакансий мало, потому что никому не нужны люди, которые приходят на работу учиться, и строить карьеру, а не работать.

    Поэтому выбирайте любую область, которая вам нравится, чтобы лично у вас была заинтересованность и желание дойти до приемлимой квалификации.
    Ответ написан
    2 комментария
  • Как быть хорошим junior?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    1. Адекватность и самостоятельность.
    Детальнее: Умение понять суть задачи, чтобы выполнить ее. Самостоятельно решать проблемы - в это слово входит не только то, что возникла проблема - порешал. А умение решить проблемы, которые ты решить не можешь. То есть организовать решение проблемы. Заблочили аккаунт? Выяснить, вызвонить, попинать, чтобы разлочили побыстрее. Не знаешь как решить какую-то техническую проблему - достучаться до куратора. Не сидеть и ждать три дня, пока он вспомнит про твою проблему, а регулярно уточнять. Занят куратор - подойти к другому. Не успеваешь решить в срок - прийти к куратору заранее, а не за час до конца срока.
    В общем, чтобы за тобой не бегали.

    2. Умение ставить правильные вопросы.
    Сперва загуглить, потом задать вопрос для уточнения. В идеале ставить вопросы, на которые ответ будет "да" или "нет", но это я утрирую. Не бояться спрашивать вещи, которые совсем не понимаешь, но тут не нужно ожидать что все будут разжевывать - следует задать вопрос, чтобы понять куда копать. Иногда достаточно знать пару ключевых слов, по которым можно загуглить.

    3. Желание учиться.
    Не бояться изучить лишнее, потому что "мне же это не пригодится". Умение гуглить по ключевым словам. Не лениться изучать как что-то работает, чтобы понимать почему это происходит. Понимание принципов работы очень сильно увеличивает интуицию.
    Ответ написан
    1 комментарий
  • Bash Как использовать маски в переменных, чтобы они не раскрывались раньше времени?

    saboteur_kiev
    @saboteur_kiev Автор вопроса, куратор тега Linux
    software engineer
    Сам разобрался. Надо юзать кавычки и массивы.
    В примере ниже typeset -a не обязателен, но он обязателен, если присваивание DELETEITEMS идет из другой переменной (например сперва я прочитал LINE из какого-от файла, а затем присваиваю typeset -a DELETEITEMS="$LINE". Но главное, что маски файлов не будут раскрываться до тех пор, пока не заюзаешь их без кавычек. То есть в echo "executing: ${ITEM}" это еще маска, а в rm -rf $ITEM это уже список файлов по маске.

    #!/bin/bash
    typeset -a DELETEITEMS=("/*/*/*.epk" "/*/*/*.tar.gz" "/*/*/*.vmdk.zip" "/*/*/*.ext3" "/ipk/*/*.ipk")
    for ITEM in "${DELETEITEMS[@]}"
    do
    echo "executing: ${ITEM}"
    rm ${ITEM}
    done
    Ответ написан
    Комментировать
  • Как обрезать строку по "/"?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    String mylist[]=url.split("/");
    var1=mylist[0];
    var2=mylist[1];

    так?
    Ответ написан
    5 комментариев
  • Закрыть доступ к папке пользователю linux за /var/www?

    deepblack
    @deepblack
    Ну так 0777 полный доступ для всех, 0770 - полный доступ (включая выполнение) владельцу, группе. Для других запрет любых действий.

    Owner: rwx=4+2+1=7
    Group: r-x=4+0+1=5
    Other: r-x=4+0+1=5
    Ответ написан
    2 комментария
  • Какая ОС, по вашему мнению подойдёт лучше?

    suffix_ixbt
    @suffix_ixbt
    https://www.babai.ru/
    Если всю дорогу работали с Centos то зачем ещё куда-то рыпаться ?
    Переходите на RHEL 8 по двум вариантам:

    1. Честно платите за лицензию ибо у Вас коммерческий проект
    2. Изображаете из себя девелопера и до 16 лизензий бесплатных можете использовать (с моральной точки зрения как-то не айс так делать)
    Ответ написан
    Комментировать