• Python в запущенный в контейнере работает медленнее натива?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Разница в бинарях - Python на хостовой машине собран без отладочной информации, а тот, который в образе python:3.10.4 собран с нею.

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

    Можно пойти дальше и собрать Python из исходников самому, но самостоятельная сборка это такое себе развлечение (хотя с помощью pyenv делать это довольно просто), а выигрыш не такой уж и значительный - устанавливать бинарные пакеты сильно проще.

    PS
    Никогда не используй образы Alpine - там вместо glibc суррогат под названием musl. В прочем для статически слинкованных бинарей на Go использовать можно, но тогда уж выгоднее использовать scratch
    Ответ написан
    5 комментариев
  • Увеличение списка до нужной длинны в pyhon?

    Maksim_64
    @Maksim_64
    Data Analyst
    Обычно когда мы имеем дело с множеством списков разной длинны и нужно выбрать из каждого по индексу то zip_longest из itertools решает проблему. Способов применения может быть много, простейший выглядит вот так
    from itertools import zip_longest 
    x = [1, 2, 3, 4, 5, 6, 7] 
    y = [8, 9, 10] 
    z = [9, 3, 4, 5]
    list(zip_longest(x,y,z))
    Ну а там в зависимости от того как эти списки получаются и что на выходе можно по разному реализовать. zip_longrst имеет параметр fillvalue, чем заполнять по умолчанию None. Ну и надо помнить про распаковку, то есть если все эти списки собраны ну например в какой то один список то можно использовать так.
    data = [x,y,z]
    list(zip_longest(*data))
    Ответ написан
    Комментировать
  • Как сделать так чтобы данные перезаписывались, а не добавлялись новые?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты используешь pandas датафрейм, потом начинаешь чего то изобретать. Pandas фрейм имеет метод to_sql https://pandas.pydata.org/docs/reference/api/panda.... Ему надо передать имя таблицы, объект соединения, так же у него есть параметр if_exists, которому можно присвоить значение replace. И будет перезапись.

    Раз уж у тебя есть фрейм то и оставайся в рамках датафрема сформируй необходимый подсет. И без cursor.execute отправляй в любую базу в том числе и в sqlite.
    Ответ написан
    8 комментариев
  • Как сделать так чтобы данные перезаписывались, а не добавлялись новые?

    Daemon23RUS
    @Daemon23RUS
    "INSERT INTO benz VALUES (?, ?, ?, ?, ?)"
    заменить на UPDATE ..... https://www.sqlite.org/lang_update.html
    P.S или использовать INSERT ..... ON CONFLICT(ключевое_поле) https://www.sqlite.org/lang_conflict.html
    Ответ написан
    Комментировать
  • Как формировать сырые SQL запросы максимально эффективно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я в самодельных билдерах запросов добавлял фейковый предикат 1=1 который всегда был. Тогда добавление новых предикатов делается проще. Вот как-то так.

    def get_user(*, username: str = None, email: str = None, id: int = None, is_blocked: bool = None):
        SQL = "SELECT * FROM USERS {} LIMIT %s OFFSET %s WHERE 1=1 "
        more = []
        if username:
            more.append("AND username = '%s'" % username)
        if email:
            if any([username]):
                more.append("AND email = '%s'" % email)
        if id:
            if any([username, email]):
                more.append("AND id = '%s'" % id)

    Я проверял этот код на валидность. Это лишь идея как сделать. Поэтому исправляй дальше сам.
    Ответ написан
    Комментировать
  • Где научиться профессионально искать и анализировать информацию?

    @dmshar
    Современное поколение почему-то твердо уверено, что любой ответ можно найти в интернет. В Гуугл или вот, последняя "панацея" - ChatGPT. Ну, на худой конец, вместо того, что-бы самому подумать, напрячься, поискать информацию, потом подумать, какая из них ложная или нет, потом опять подумать и обработать полученную информацию так, как нужно именно вам (а по дороге еще и хорошо потренировать свой мозг) - предпочитают пойти на форум, задать вопрос, лечь на диван посмотреть какой-нибудь фильмик (вариант - поиграть за компом в игруху) и дождаться, когда ответ преподнесут готовый, разжёванный, проверенный и подготовленный.
    Вот только в реальности все не так.
    1. Для того, что-бы задать вопрос - надо УЖЕ быть подготовленным, т.е. предварительно быть, что называется "в теме". Как минимум затем, что-бы правильные термины в запросе использовать, как максимум - задавать вопрос так, что бы он не был совсем дурацким.
    2. Для того, что-бы из полученной горы информационного шлака извлечь полезную информацию - надо УЖЕ быть подготовленным, т.е. предварительно иметь в теме достаточно знаний и опыта, что-бы понимать, где шлак а где золото.
    3. Для того, что-бы полученную информацию приспособить к своим конкретным потребностям - надо УЖЕ быть подготовленным, т.е. понимать свою тему настолько глубоко, что-бы можно было это препарирование сделать.
    Неучи подумали - появился ChatGPT - ура, сейчас на любой вопрос получим ответ и будет нам счастье, и учиться не надо! А вот фиг вам. На вопрос - "кто победил на прошлом чемпионате мира", или "как починить кран в умывальнике" - да ответ получите, и скорее всего правильный. А вот там, где надо думать, где вопросы не на фактаж, а на "подумать" - уже явно заметен парадокс: что-бы понять и извлечь пользу из диалога с ChatGPT надо быть умнее самого ChatGPT! Иначе будет не счастье, а горе. Т.е. надо сначала стать специалистом, а потом уже общаться с ИИ. Беда заключается еще и в том, что не понимая этого, надеясь на ИИ или даже на ЕИ (в виде коллективного разума на форуме) конкретный человек отучивается думать самостоятельно. Потому что жить на подсказках - это как жить на наркотиках. Мозг, привыкший к наркоте (подсказкам) перестает вообще развиваться и человек просто деградирует. И вот этом, а не в мифическом восстании ИИ против человечества - основная угроза, которую ИИ и несет человечеству.
    Так что ответ на ваши вопросы один - "учиться, учиться и еще раз учиться" - как говорил дедушка Ленин. Самостоятельно и серьезно. Т.е. сначала становимся специалистом хоть в чем-то, а потом думаем, как-же вооружиться инструментом УСИЛЕНИЯ наших знаний в виде Google, ChatGPT (или чего еще на тот момент придумают). А если нет базы - то усиляй не усиляй - все равно на выходе получишь пшик.
    Ответ написан
    Комментировать
  • Где научиться профессионально искать и анализировать информацию?

    vpetrov
    @vpetrov
    частный SEO-специалист, textarget.ru
    Во-первых, стоит смотреть информацию по теме OSINT. Много бесплатной, есть и отдельные курсы. Ну, и инструментарий: https://www.exploit-db.com/google-hacking-database
    Во-вторых, не надо пользоваться поисковыми системами типа Гугл и Яндекс. Это, в общем, и не поисковые системы, а рекламные - уже давно. Попробуйте вот такое:
    https://biznar.com/biznar/desktop/en/search.html
    https://www.faganfinder.com/
    https://www.social-searcher.com/
    Как минимум, мультипоиск явно полезнее, чем привычные псевдо-ПС с их цензурой, рекламой и фильтрацией.
    Ответ написан
    Комментировать
  • Как получить доступ к свойству объекта JSON не зная его название?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как получить доступ к свойству объекта "extract" не зная его название?

    Итерированием объекта (если имеются вложенные объекты, то нужно обходить рекурсивно).

    Предположим, у нас имеется json объект, далее мы его итерируем и печатаем ключи и их значения (не зная названия ключей заранее):
    data = {
        "batchcomplete": "",
        "query": {
            "pages": {
                "18978754": {
                    "pageid": 18978754,
                    "ns": 0,
                    "title": "Apple",
                    "extract": "An apple is a round, edible fruit..."
                }
            }
        }
    }
    
    def print_key_value_pairs(obj, indent=0):
        if isinstance(obj, dict):
            for key, value in obj.items():
                print(' ' * indent + f"Key: {key}")
                if isinstance(value, (dict, list)):
                    print_key_value_pairs(value, indent+4)
                else:
                    print(' ' * (indent+4) + f"Value: {value}")
        elif isinstance(obj, list):
            for index, item in enumerate(obj):
                print(' ' * indent + f"Index: {index}")
                print_key_value_pairs(item, indent+4)
    
    print_key_value_pairs(data)
    Ответ написан
    7 комментариев
  • Правильно ли я понимаю устройство классов в python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Нет у тебя абсолютно не правильное представление по все пунктам. Написание хорошего ответа на каждый вопрос потребует дней, при том что на все эти темы можно разговаривать на совершенно разных уровнях. Если хоть как-то в двух словах.
    1. OOP одна из парадигм в программировании в том числе поддерживаемая python.

    2. Объект это python абстракция для данных, все данные в python представлены в виде объектов или взаимоотношений между объектами. Отсюда и выражение все в python является объектом.

    3. В python каждый класс не явно наследуется от object класс. Да даже если мы не переопределим явно __init__ то он там есть. Например
    class MyClass:
        pass
    my_instance = MyClass()
    print(dir(my_instance))
    Там будет в том числе __init__ хотя мы его явно не определяли. __init__ это конструктор класса там могут быть заданы атрибуты которые будут в области видимости экземпляра класса, с которыми будут оперировать методы экземпляра класса, он выполнится при создании экземпляра класса.

    4. По скольку, ты еще совсем новичок, понятия "приватных" и "защищенных" атрибутов обсуждать совсем бессмысленно, к тому же их "приватность" она в ковычках, в python нет способа создать настоящий приватный атрибут, но это все совершенно лишнее для тебя сейчас и в обозримом будущем.

    5. В зависимости от того является ли определенный метод методом класса или методом экземпляра класса, то первый позиционный параметр метода это класс или экземпляр класса. Между программистами python их принято называть cls - для класса, self - для экземпляра класса. Так как ты в начале пути будешь работать с методами экземпляра класса, да и необходимость создавать методы класса она значительно реже.

    Не думаю что тебе хоть что то стало понятней. По этому бери и изучай понимание будет приходить медленно и со временем, а не пытайся понять все вопросы на раз два.
    Ответ написан
    3 комментария
  • Как прокручивать страницу вверх Selenium Python?

    coderisimo
    @coderisimo
    Общая идея. Вам нужно крутить колесико (скролл) мыши через JS.
    Запихните в driver.execute_script что-то в этом роде :
    var evt = document.createEvent('MouseEvents');
    evt.initEvent('wheel', true, true); 
    evt.deltaY = -100000; 
    document.querySelector('.yamb-conversation__content').dispatchEvent(evt);

    вместо 10000 можно window.innerHeight.
    Ответ написан
  • Не устанавливаются библиотеки Python. Что делать?

    @Jack444
    У меня такая же беда, много библеотек не устанавливалось, помогло только через зарубежный VPN.
    Ещё если что можно через проокси установить
    pip install --proxy http://user:password@ip:port flask eel kivy
    Ответ написан
    2 комментария
  • Вопросы по sqlalchemy

    @NickolayDen
    Как сказал REDkiy, просто укажи:

    ```
    id = db.Column(db.Integer, primary_key=True)
    ```
    Ответ написан
    Комментировать
  • Вопросы по sqlalchemy

    @REDkiy
    Оживим труп. :-)
    SQLAlchemy требует обязательного(!) присутствия в таблице первичного ключа.
    Ответ написан
    Комментировать
  • Как запустить две асинхронные функции?

    @alekssamos
    Программист любитель
    import asyncio
    
    async def foo():
        print("foo")
    
    async def bar():
        print("bar")
    
    async def main():
        await asyncio.gather(foo(), bar())
    
    if __name__ == "__main__":
        asyncio.run(main())

    61d333cb317c8733090499.jpeg
    Ответ написан
    Комментировать
  • Как спарсить данные из PDF таблицы?

    Adamos
    @Adamos
    которое высылается каждый день в pdf файле в виде таблицы

    Кем? Рептилоидами, которые не идут на контакт и съедают всех почтовых голубей?
    Имхо, вы мужественно преодолеваете искусственно созданные проблемы.
    Причем, возможно, добьетесь кое-каких результатов... но первое же изменение "у них" эти ваши результаты похерит вдребезги напополам, и придется начинать все сначала.
    Запросите у источника данные в другом формате и не делайте себе голову.
    Ответ написан
    2 комментария
  • Смена версии питона на убунту все сломала, как исправить?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Не надо так делать - попадёшь в dependencies hell

    Используй pyenv (не забудь установить библиотеки).

    Что бы установить pyenv curl https://pyenv.run | bash
    Установить Python pyenv install 3.9.7
    Сделать его дефолтным интерпретатором pyenv global 3.9.7 только так тоже делать не надо, а надо создать virualenv и работать в нём.

    И есть беспройгрышный вариант - запускать в Docker.
    Ответ написан
    2 комментария
  • Как самому написать библиотеку запросов Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Только что глянул исходники - requests простой как 3 копейки, так как он скорее всего надстройка над urllib3.

    Есть идея залезть в github и читать исходники библиотеки requests, но будет ли это верным шагом?
    Учитывая тот факт, что эта библиотека по умолчанию установлена во многих дистрибутивах Linux, и является одной из самых популярных в Python - да.
    Ответ написан
    7 комментариев
  • Актуальная литература по Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    "Изучаем Python" Лутца и "Python к вершинам мастерства" Ромальо.
    Ответ написан
    1 комментарий