• Правильное отображение прогрессбара на Python - что не так?

    Kademn
    @Kademn
    Злой
    Давайте по-порядку.
    Вот участок кода, отвечающий за прогресс-бар:
    for i in range(lenLi):
        sys.stdout.write('\r')
        sys.stdout.write("[%-30s] %d%%" % ('='*i, i))
        sys.stdout.flush()

    Во-первых вывод в консоль у вас неправильный. Длина вашего прогресс-бара 30 символов. Значит при каждой итерации нужно выводить количество символов, соответствующее итерации, не забывая, что нельзя выводить дробное количество символов. К примеру, если длина списка у вас 5, значит 30/5=6 символов добавляет каждая итерация цикла. Но вы переписываете весь прогресс-бар, поэтому можно посчитать "часть" от всей длины (30 символов) для этого шага. Например для длины 5, шаг 1 - это 1/5 длины, шаг 2 это 2/5 длины и т.д. Тогда количество символов это количество символов для "полной" длины умножить на полученную часть.
    part = float(i)/(lenLi-1)
    symbols_num = int(30 * part)

    lenLi -1, так как выше вы увеличивали длину на единицу (видимо для range), то тогда range стоило бы начинать с 1, а не с нуля. А проценты легко получить умножив part на 100, не забыв сменить форматирование вывода с '%s%%' на, скажем, '%3.2f%%', так как в выводе дробное число и оно очень плохо смотрится, если %s.
    Теперь прогресс-бар будет выводиться правильно:
    for i in range(1, lenLi):
        sys.stdout.write('\r')
        part = float(i)/(lenLi-1)
        symbols_num = int(30 * part)
        sys.stdout.write("[%-30s] %3.2f%%" % ('='*symbols_num, part*100))
        sys.stdout.flush()

    Правда, чтобы успеть увидеть изменения, добавьте в цикл wait(), иначе все 100% заполнятся за доли секунды.
    UPD
    Да, вы для каждой ссылки заполняете прогресс-бар от нуля до 100 процентов. Цикл внутри цикла не нужен. Прогресс-бар должен быть частью for x in li:. Но, для правильного отображения прогресс-бара, вам необходимо считать номер шага. Для это можно либо завести переменную, которая будет считать шаги, либо использовать функцию enumerate:
    for step_number, x in enumerate(li):
    Учитывая, что вам удобнее нумеровать шаги с единицы, правильнее было бы использовать
    for step_number, x in enumerate(li, 1):
    А вообще, если вы хотите использовать прогресс-бар и в других местах кода, то стоило бы завести отдельную функцию для печати прогресса, которая принимает дробное число от 0 до 1 или процент в качестве аргумента и выводит в консоль соответствующий прогресс-бар, возвращая каретку в начало строки.
    Полагаю, что этих подсказок более, чем достаточно. Дальше попробуйте сами.
    Ответ написан
    3 комментария
  • Как на Python Сделать свою сортировку?

    aRegius
    @aRegius
    Python Enthusiast
    Добрый день, Олег.

    Свою сортировку, реально, можно делать как угодно, в зависимости от задачи: и sort(), и sorted(), и слайсы, и пр. Что касается вашего конкретного примера с картами, вот, например, простой вариант:
    >>> symbols_start = '23456789TJQKA'
    >>> symbols_heap = 'A926K'
    >>> symbols_heap_sort = ''.join(i for i in symbols_start if i in symbols_heap)
    >>> symbols_heap_sort
    '269KA'
    Ответ написан
    4 комментария
  • Автоинкремент в INSERT INTO ... ON CONFLICT?

    Melkij
    @Melkij
    PostgreSQL DBA
    Никак. Работает как задумано.

    И уже при вставке идет разрыв в id.

    sequence не гарантирует неразрывность. И последовательность значений тоже не гарантирует.
    Гарантирует только уникальность значений.
    Ответ написан
    7 комментариев
  • Как вывести 50 нужных записей из базы в миллионы?

    Astrohas
    @Astrohas
    Python/Django Developer
    Вообщем, то по скорости Limit ничем не отличается (ну почти) от полного SELECT. В вашем случае тормозит именно сортировка. Попробуйте проиндексировать поле по которому будет осуществляться сортировка.
    Ответ написан
    Комментировать
  • Как Вы мониторите проекты на Upwork? Приложения, RSS, пр.?

    opium
    @opium
    Просто люблю качественно работать
    Ответ написан
    Комментировать
  • Какую операционную систему использовать для разработки на Python?

    @trofimovdev
    Python
    Подскажите стоит ли переходить на Linux

    Стоит однозначно. Как минимум для ознакомления.

    Из дистрибутивов могу посоветовать Ubuntu, он самый, на мой взгляд, простой для знакомства.
    Сам использую Lubuntu.

    Программирую на Python и могу сказать, что на Linux делается все гораздо проще.
    Если на Windows для установки модуля нужно зайти на сайт производителя, скачать архив, распаковать и только потом начинать его использовать (UPD: на нем тоже можно вводить команду :D), то в Linux для этого нужно прописать всего одну команду.
    Ну и в большинстве туториалов по всяким модулям и т.п. используется на Linux.

    Если совсем не хотите отказываться от Windows (например, из-за игр, как это сделал я), то просто установите Linux второй системой.
    Ответ написан
    8 комментариев
  • Как проверить уникальность данных в полях ForeignKey?

    Astrohas
    @Astrohas
    Python/Django Developer
    делайте m2m и не изобретайте велосипеды.
    class Team(model.Model):
        ...
       players  = models.ManyToManyField(Player)

    В Админке делаете filter_horizontal
    Ответ написан
    6 комментариев
  • Арифметические операции в django templates?

    @vanillathunder
    Все эти операции не нужно делать в template.
    Ответ написан
    Комментировать
  • Арифметические операции в django templates?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    1. Читаем документацию
    2. Применяем прочитанное: {{ x|add:y }}
    Ответ написан
    Комментировать
  • Парсер pdf, возможно ли?

    @jkotkot
    режим сарказма
    Ну так-то можно текст просто вытащить оттуда. с координатами. потом как-то разобрать.
    Мы такое делали, но только за деньги)
    Ответ написан
    Комментировать
  • Django. Права на файл после записи?

    @frilix Автор вопроса
    Иногда "творю"
    Погуглив узнал, что у django есть параметр отвечающий за права.

    Решение:

    FILE_UPLOAD_PERMISSIONS = 0o644


    If this isn’t given or is None, you’ll get operating-system dependent behavior. On most platforms, temporary files will have a mode of 0o600, and files saved from memory will be saved using the system’s standard umask.


    Что означает, что это зависит от платформы и нужно принудительно задавать эту маску, чтоб не было взято по умолчанию
    Ответ написан
    Комментировать
  • Как постепенно перекочевать из Web в Machine Learning максимально безболезненно?

    @asd111
    Из языков строго python. Он похож чем то на Golang и на javascript так что сложностей в использовании не возникнет. С++ и R сразу нет. Потому что на С++ пишут в основном только сами библиотеки для ML либо что то очень быстрое наподобие анализа видеопотока в автопилотах и даже тогда прототип пишут на python, а R практически не развивается по сравнению с python и имеет более узкую сферу применения чем python.
    В плане обучения можно сделать так:
    1. Прочесть хорошую книгу по теме, потому что нужно знать термины и основные алгоритмы. Ну или хотя бы посмотреть курсы Andrew Ng Machine Learning. Для применения чужих библиотек на простых задачах этого в принципе достаточно.
    2. Глянуть scipy, numpy и jupyter notebook. У scikit есть scikit learn, в котором реализованы некоторые популярные алгоритмы. Например SVM, decision trees и т.д. и есть доки под это дело для начинающих scikit-learn.org/stable
    3. Зарегистрироваться на kaggle.com и найти задачу про титаник. Вот она https://www.kaggle.com/c/titanic Делаете решение как умеете. Можно взять простой gradient boost. Yandex как раз недавно выложил либу под это дело называется cat boost https://tech.yandex.ru/catboost/ Банальное использование этой библиотеки может дать около 80% точности. Вот туториал https://github.com/catboost/catboost/blob/master/c...
    4. Прочитать про keras. Взять готовую модель для смешивания стилей изображений и сделать сайт наподобие ostagram.ru для смешивания изображений. https://github.com/fchollet/keras/blob/master/exam...

    5. Дальше всё зависит от вас, поскольку заработать в области ML непросто :) Когда прочтете хотя бы одну книгу по ML, регистрируйтесь здесь ods.ai - это сообщество русскоговорящих специалистов в данной области.
    Ответ написан
    Комментировать
  • Сколько придется создать моделей и отношений?

    class Category(models.Model):
        parent = models.ForeignKey('self', null=True)
        title = models.CharField(...)
    
    class Product(models.Model):
        title = models.CharField(...)

    Яблоко Гольден, это товар категории Фрукт, подкатегории Яблоко, подподкатегории Гольден.
    Гибрид, это подкатегория имеющая две родительские категории. Следовательно: parent = models.ManyToManyField('self', null=True)

    Лучший сорт - это просто булевое значение ->
    # in class Category
    is_best = models.Boolean(default=False)
    Ответ написан
    2 комментария
  • Может ли продление домена стоить дороже регистрации?

    font
    @font
    В поисках самого лучшего
    Если домен урвали кошерный, то лучше потратиться. 799 рублей, конечно, деньжищи большие, но мало ли угонят перед носом.
    Я так делал, например.
    Ответ написан
    Комментировать
  • Как правильно организовать сложную цепочку ajax-запросов?

    kurtov
    @kurtov
    this.start = function(){
        // останавливаем репликацию
        return this.stopAndClearExistsReplication()
            // удаляем локальную БД
            .always(function(){ return this.deleteLocalDB() })
            // создаём локальную БД
            .always(function(){ return this.createLocalDB() })
            // ставим БД на репликацию
            .done(function(){ return this.addReplicationDocument() })
            // ставим репликацию на отслеживание
            .done(function(){ return this.replicationMonitoring() });
    };

    По примеру похоже что вы в каждом предыдущем методе bind`ите правильный this так что можно вынести в функции выше.
    this.start = function(){
        // останавливаем репликацию
        return this.stopAndClearExistsReplication()
            // удаляем локальную БД
            .always(deleteLocalDB)
            // создаём локальную БД
            .always(createLocalDB)
            // ставим БД на репликацию
            .done(addReplicationDocument)
            // ставим репликацию на отслеживание
            .done();
    };
    
    function deleteLocalDB(){ return this.deleteLocalDB() }
    function createLocalDB(){ return this.createLocalDB() }
    function addReplicationDocument(){ return this.addReplicationDocument() }
    function replicationMonitoring(){ return this.replicationMonitoring() }


    Если доступны стрелочные функции и this один на все методы
    this.start = function(){
        // останавливаем репликацию
        return this.stopAndClearExistsReplication()
            // удаляем локальную БД
            .always(() => this.deleteLocalDB())
            // создаём локальную БД
            .always(() =>  this.createLocalDB())
            // ставим БД на репликацию
            .done(() => this.addReplicationDocument())
            // ставим репликацию на отслеживание
            .done(() =>  this.replicationMonitoring());
    };


    Если есть промисы и имена методов не требуют капитанских комментариев
    this.start = function(){
        return Promise.resolve()
            .then(() =>  this.stopAndClearExistsReplication())
            .always(() => this.deleteLocalDB())
            .always(() =>  this.createLocalDB())
            .done(() => this.addReplicationDocument())
            .done(() =>  this.replicationMonitoring());
    };
    Ответ написан
    4 комментария
  • Как вставить MEDIA_URL в шаблоне Django?

    sim3x
    @sim3x
    статик - контент, который относиться к фреймворку и тому что написано на нем
    https://docs.djangoproject.com/en/1.9/howto/static...

    {% load staticfiles %}
    <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>


    медиа - контент, который сгенерировал в ходе работы приложения. ЕГо могли сгенерировать пользователи, админы и тд

    Линки на медиа файлы делаются еще проще

    {{ mymodel.my_image_field.url }}
    Ответ написан
    8 комментариев