Ответы пользователя по тегу Python
  • Python - как сохранить веб-страницу (статью Telegraph) в PDF?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Вполне рабочее решение. Работает и на сервере тоже. https://wkhtmltopdf.org/
    Ответ написан
  • Почему не происходит выход из цикла в python 3.8.0?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Да, дружище, это не Паскаль

    Подумай, с чем ты сравниваешь переменную 'c'? Не с ДА или YES, а с результатом логической операции or
    т.е. твоё ('Да') or ('да') всегда вернёт True
    Переменная же 'c' - не пустая, а, значит, тоже True в смысле булевых отношений. Так что у тебя всегда "ДА"
    Если переделывать твой Паскаль-код, то это, скорее,
    if c == 'Yes' or c == 'yes' or c == 'y' и т.д.

    Но лучше писать сразу на Питоне: проверяй полученное значение на вхождение в список. Так проще:
    if c in ['Yes', 'yes', 'y', 'Да']:

    Но у тебя сплошной повтор одного и того же (плюс я могу ж и "YES" ввести!). Будь проще:
    if c.lower() in ['yes', 'y', 'да', 'д']:

    Далее - вынеси блок
    c = input('Продолжить работу? Д/Н ')
    if c == ('Да') or ('да') or ('Yes') or ('yes') or ('y') or ('Y') or ('д') or ('Д'):
      continue
    elif c == ('Нет') or ('нет') or ('No') or ('no') or ('n') or ('N'):
      break

    после оператора if. Тогда он будет у тебя написан один раз. Это правильно. Не повторяй себя.

    Ну, как-то так...

    print('\n')
    print('Калькулятор\n\n')
    while True:
      x = int(input('Введите первое число: '))
      y = int(input('Введите второе число: '))
      z = input('Введите знак: ')
      res = 0
      if z == '+':
        res = x + y
      elif z == '-':
        res = x - y
      elif z == '*':
        res = x * y
      elif z == '/':
        res = x / y
      else:
        print('Оператор обязателен и может быть только + или - или * или / ')
        continue
    
      print('Ваш результат: ',res)
      c = input('Продолжить работу? Д/Н ')
      if c.lower() in ['да', 'yes','y', 'д']:
        continue
      elif c.lower() in ['нет', 'no', 'n', 'н']:
        break


    Тут можно ещё много чего усовершенствовать, но, надеюсь, главное ты понял :-)
    Ответ написан
    Комментировать
  • Как стать Python Middle Developer?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Junior: спрашивает "как мне это сделать?"
    Middle: объясняет джуну, как сделать и интересуется у сеньёра "что ещё надо сделать?"
    Senior: организует список задач (мидлу и джуну), объясняет, почему это делать не надо, а лучше сделать вот это. И делает.

    Как-то так.

    Вопрос именно опыта. Причём не только и не столько в Python, сколько вообще в IT и вокруг. Надо и админить хоть немного, и языки расширять и технологиями интересоваться. Книжки читать. И не только технические.
    Софт-скиллз эти самые уметь...
    Ответ написан
    Комментировать
  • Что пишут на питоне?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    - Сайты (бэкенд, фронт - это вотчина JS, хотя и туда проникает в виде brython, skulpt)
    - Десктопные программы разного уровня сложности (видел банкоматную начинку на PyQT, можно посмотреть на Ultimaker - софт для управления 3Д-принтерами)
    - AI / ML / математика / биология / аналитика
    - Встраиваемый язык расширения возможности программ (в Blender, к примеру)
    - микроконтроллеры (micropython)
    - драйверы устройств и OS - (это, скорее, академические проекты из разряда "быстренько как иллюстративный материал к курсачу")
    - утилиты командной строки
    - командные оболочки (по типу bash - смотри fish)
    - мессенджеры как GUI (Gajim), так и TUI
    - боты подо всё, что можно
    - приложения и игры для Android

    В общем можно писать всё. Вопрос в том, где его лучше применять - это другой вопрос.
    А ты что хочешь писать?
    Ответ написан
  • PDF OCR консольный вариант или python?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    cuneiform из командной строки нормально распознаёт и сохраняет. А так - tesseract и pyocr. PDF напрямую не умеет, но растеризовать его в PNG - делов-то...
    Как-нибудь так:
    from wand.image import Image as Img
    from wand.color import Color
    from PIL import Image
    import pyocr
    import pyocr.builders
    import os
    from timeit import default_timer as timer
    
    pdf_name = '1.pdf'
    pdf_path = os.path.join(os.getcwd(), pdf_name)
    
    img_name = 'pdf_1'
    image = f'{img_name}.png'
    
    with Img(filename=pdf_path, resolution=300) as img:
        img.format = 'png'
        img.background_color = Color('white')
        img.alpha_channel = 'remove'    
        img.save(filename=image)
    
    tools = pyocr.get_available_tools()[1]
    lang = tools.get_available_languages()
    
    builder = pyocr.builders.TextBuilder()
    
    start = timer()
    text = tools.image_to_string(Image.open(image), lang='rus', 
                                 builder=builder)
    end = timer()
    print(f"{end - start} \n\n")
    
    print(text)

    PyOCR - там нормальная документация
    Ответ написан
  • Можно ли написать свой редактор кода на python?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Ну, если хочется - смотри на то, что есть и делай лучше.
    Вообще-то камень преткновения здесь - грамотный текстовый движок. Их, доступных для Питона, очень не много.
    Есть в TkInter - его, если мне не изменяет память, использует штатный питоновский IDLE.
    Так же есть интересный проект https://thonny.org - тоже TkText расширяет.
    Раньше TkInter использовал LeoEditor, но он давно перешёл на Qt (leoeditor.com ) и использует свой движок (хотя, скорее, там есть возможность выбора - давно не смотрел).

    Scintilla - как компонент используется очень много где. В том числе и в коммерческой WingIDE, если я правильно помню. Примеров кода тут много, поскольку этот компонент интегрирован со всеми основными UI библиотеками.
    Смотри https://github.com/spyder-ide/spyder , ninja-ide.org ,
    https://github.com/matkuki/ExCo интересная штука, Eric IDE найди...
    Про scintilla можно почитать и на Хабре: https://habr.com/ru/post/144848/ https://habr.com/ru/post/144411/

    Кстати, там упоминается редактор, который теперь enki-editor.org и использует не scintilla, Qutepart - еще один вариант текстового движка (https://habr.com/ru/post/188144/ )

    Ещё есть интереснейший проект https://github.com/SergeySatskiy/codimension
    У него, вроде бы, тоже свой текстовый движок (на Qt, но не Scintilla)

    В общем изучай опыт и используй лучшее!
    Ответ написан
    3 комментария
  • Как реализуют инкапсуляцию в python?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Камрад hack504 хорошо направил. Модификаторы доступа.
    Просто прими тот факт, что это интерпретируемый язык и прятать в нём что-то - дело неблагодарное.
    Если тебе надо скрыть реализацию каких-то внутренних механизмов создаваемой тобой библиотеки, то тут только положиться на джентльменские соглашения с подчёркиваниями и обеспечить хорошую документацию чтобы не было необходимости залезать в потроха.
    Если ты просто что-то пишешь (конечный продукт) - просто пиши. Не заморачивайся с этим, пока не возникнет прямой необходимости.

    Если же пишешь что-то шибко коммерческое и хочешь реально скрыть реализацию, вот чтоб прям ну никак не посмотреть, что там в потрохах - пиши на другом языке. Например всю машинерию на C, а на python только обвязку.
    Ответ написан
    Комментировать
  • С чего начать разработку браузера?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Ну вот ты пишешь, что хочешь сделать браузер на движке Blink.
    Тут и кроется ответ на твой вопрос. Поднимаешь доку на Blink и смотришь как его использовать. API, примеры и т.д.

    Есть исходники браузеров на Blink - посмотри как они делали. В любом случае всё начинается с анализа имеющейся информации, документации, примеров.

    Так что твоя проблема не в обработке HTML страниц (этим занимается Blink без твоего участия). Твоя проблема - правильно гуглить и читать много документации на английском и много кода на разных ЯП :-)
    Ответ написан
    Комментировать
  • Как скомпилировать код написанный на Python в смартфонe?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Если Kivy уже используете, то должны знать и такие слова как buildozer и p4a (python for android). Собственно это всё, что надо знать для сборки :-)
    Ответ написан
    Комментировать
  • Почему зависает программа?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Надо больше информации.
    К примеру поставь простейший счётчик. Чтобы выводить количество запросов до отвала. можно ещё точнее считать время. Перед циклом сохранить текущее время и в каждом print('Запрос отправлен') кроме текущего счётчика ещё выводить дельту времени. Так ты всегда сможешь увидеть сколько точно прошло запросов и через сколько точно остановился процесс.
    Прежде чем прибивать - посмотри, сколько памяти занял процесс. Может какое переполнение?
    А каково время жизни сессии? Может просто сессия истекает - ты же в рамках сессии долбишься, а не отдельными запросами.

    В общем просто аналитика. Анализ - это значительная рабочего часть времени программиста :-)
    Ответ написан
    Комментировать
  • Путь становления back-end разработчиком?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Да ничего особенного. Берёшь Django и:
    1) Пишешь сервис погоды. По введённому городу - погоду с API погоды. (выбирай)
    2) Вместо перезагрузки рендеренной страницы делаешь AJAX запрос с JQuery, к примеру. Банально заменяя кусок html
    3) Переделываешь свой фронт и бэк так, чтобы по AJAX-запросу не кусок html отдавался, а JSON с данными, а на фронте - по этим данным перерисовывался твой виджет погоды.
    4) Заменяешь самопальную view, отдающую JSON на view из Django Rest Framework.
    5) Добавляешь кэширование запросов к своему и внешнему API
    6) Прикручиваешь Celery для тоо, чтобы запросы к внешнему API шли по расписанию и у тебя была свежая инфа.
    7) Реализуешь websocket/django-channel для того, чтобы доставлять изменения погоды на страничку пользователям авоматически (можно уже оформить погодный виджет в виде встраиваемого на сайт клиента)
    8) Разбираешься с Docker, AWS и прочим для деплоя

    Вуаля! Ты бэкенд-разработчик (и немножко фронт - но без этого, поверь, ну никак вообще - ты должен понимать, что там происходит хотя б в общий чертах). И немножко даже Devops. На Миддла не замахивайся, конечно, но как продвинутый джуниор - можешь претендовать и показывать всем свой крутой сервис погоды :)

    Можешь по вкусу добавить пользователей, сессии, OAuth, JWT авторизацию и т.д. Тут уж главное - не сдерживать себя :-)
    Ответ написан
    Комментировать
  • Есть ли библиотека, которая решит математическое уравнение?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Если тебе надо просто выполнить вычисления, то да, eval() подойдёт.
    Если тебе надо не ограничиваться приведённым примитивным примером прямого вычисления, а тебя интересует символьная алгебра (типа f=sin(u)^2+tan(v) ), то посмотри обзор тут: https://jenyay.net/Programming/PyMath
    Ответ написан
    Комментировать
  • Как можно ужать код Python (if)?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Вроде бы так...
    years = [year2013, year2014, year2015, year2016, year2017, year2018, year2019]
    result = sum(y.value for y in years if y.value)

    Хотя если проверка только на 0, то на результат суммирования это не влияет, тогда вторая строка даже проще:
    result = sum(y.value for y in years)
    Ответ написан
    Комментировать
  • Python: как передать параметр с пробелом?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Просто добавь кавычек :-)
    process = Popen(['python3.5', BASE_DIR + '/script.py', str(field_id), str(username), str(password), agent)])


    Поправил пример. Но коллега Rais прав - лучше нормально всё структурировать.

    И, да, читай документацию - и по-русски и в оригинале написано, что параметры Popen должны быть ЯВНО строками.
    Ответ написан
  • Что выбрать Aiohttp или Sanic?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Выбирать всегда сложно.
    Если критерием является скорость, то вот сравнение

    starlette - разрабатывает Tom Christie. Реально крутой разработчик, автор, в том числе и Django Rest Framework. Быстро, мощно, хорошо документировано.

    aiohttp проигрывает почти в 2-3 раза

    Посмотри, что ещё под asyncio есть

    Сравнение с sanic по скорости я не нашёл.

    В любом случае лучше попробовать всё на простом примере и для себя определиться, что проще/лучше/быстрее/расширяемее...

    Возьми простой пример и повтори его на starlette и sanic. И сравни результат и свои ощущения...
    Ответ написан
    Комментировать
  • Как в случае ошибки выполнить функцию заново?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Вот Retry декоратор: https://github.com/invl/retry
    Просто и надёжно.
    Если надо чего-то ещё (асинхронности, fail_callback) - посмотри в форках.
    Ответ написан
    1 комментарий
  • Как реализовать этот код в функцию?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Смысла в коде особенно не искал, но, подозреваю, df это DataFrame из pandas
    Так что что-то типа того:
    def do_strange_input(df, max_min_purchasing):
        input(f"What is your purchasing power index (higher is better)? "
                    f"The best score in the world is "
                    f"{max_min_purchasing[0]} "
                    f"({list(df[df.purchasing_power_index == max_min_purchasing[0]]['country'])[0]}), "
                    f"the worst is {max_min_purchasing[1]} "
                    f"({list(df[df.purchasing_power_index == max_min_purchasing[1]]['country'])[0]}) "))
    
    for i in range(7):
        do_strange_input(dataframe, mmp)

    Но что ты хочешь 8 раз спросить - это твоё дело :-)
    Ответ написан
    Комментировать
  • В чем разница между командами "pyenv local someEnvName" и "pyenv virtualenv activate someEnvName" ???

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    В случае local ты устанавливаешь конкретный интерпретатор (вирт) для текущего каталога (и вложенных).
    При этом происходит, в том числе и его активация. В последствии у тебя это окружение активируется автоматически при входе в этот или вложенный каталог. Просто cd ~/prg/my_cool_project и у тебя уже активировалось окружение.

    Если ты local не делал (или не в текущем каталоге), но хочешь воспользоваться каким-то своим виртом - делай activate и работай.

    global - не для всей системы, конечно, но для тебя как пользователя, по умолчанию. Подмена системного.
    local в конкретных каталогах это перекроет.

    всё это, конечно, имеет смысл после создания вирта pyenv virtualenv 3.7.3 MyCoolVertualEnv. Создание вирта не активирует его, нужно руками activate или local
    Ответ написан
    6 комментариев
  • Кто нибудь знает нормальные библиотеки для парсинга?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Если появляющиеся элементы подгружаются после клика по <a>, то смотри, откуда и как подгружаются и грузи их сразу сам. Делов-то.
    Если они не подгружаются, а просто спрятаны и на самом деле уже присутствуют в теле html, то тут ещё проще - просто парси.
    Selenium даже и не потребуется в итоге - бери парсер и вперёд (BeautifulSoup к примеру)
    В любом случае Dev Tools твоего браузера - первый инструмент и лучшая помощь.
    Ответ написан
    Комментировать
  • Нужен простой скрипт отслеживания раскладки языка Python3?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    while True:
        old_state = state
        state = do_your_own_keyb_check()
        if state != old_state:
            print("tada!!")

    Типа такого...
    Ответ написан
    Комментировать