Задать вопрос
  • Можете оценить код?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Начните с приведения кода в соотвествии со стандартами pep8
    5e6777e34a46f746495755.png

    Беглым взглядом:
    while 1 == 1:
    лучше заменить на
    while True:
    зачем вызывать операцию сравнения, если результат и так известен...
    directory_copy = 'C:\\Users\\MinuteX\\Downloads\\This is a server of MC\\fantasy_city' #Вписать директория откуда копировать папку ||| ВАЖНО!!! С ДВОЙНЫМ СЛЕШОМ
    directory = 'C:\\Users\\MinuteX\\Downloads\\Safe' #Впмсать директорию куда будут копироватся файлы, ||| ВАЖНО!!! ВСЕ СЛЕШЫ ДОЛЖНЫ БЫТЬ ДВОЙНЫМИ

    почитайте за os.path.join

    v_DIR = directory + '\\' + new_name + "_" + dt
    Почитайте за os.path.join и f-строки

    Всю вашу конструкцию в 5 строк можно привести к такому более читабельному виду к примеру:
    destination_file = os.path.join(
        DESTINATION_DIR,
        f'backup_{i}_{datetime.today().strftime("%Y-%m-%d-%H.%M.%S")}',
    )


    directory_copy = ...
    directory = ...

    вынести за пределы цикла - в цикле вы присваиваете им циклически одно и то же значение, и дать более осмысленные наименования

    В логику - не вникал...
    Ответ написан
    Комментировать
  • Можете оценить код?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    К тому, что перечислил @fox_1 добавлю:
    1. используйте pathlib;
    2. выносите магические константы ("%Y-%m-%d-%H.%M.%S") в начало модуля, именуйте их внятно;
    3. используйте argparse;
    4. принимайте пути ('C:\\Users\\MinuteX\\Downloads\\This is a server of MC\\fantasy_city') в параметрах, можно использовать безопасные умолчания и относительные пути;
    5. не конкатенируйте строки (а особенно пути) плюсиком, используйте f-строки или .format(...);
    6. соберите код в функции, сделайте точку входа, анализируйте аргументы командной строки - даже в простых скриптах эта привычка даст вам много очков к опыту и привьёт правильный аккуратный подход к разработке инструментов;
    7. в простых скриптах print - это нормально, но лучше использовать logging, чтобы ваш код можно было использовать как модуль и переопределить логированаие;
    8. делайте выхлоп ошибок в stderr, а всякий полезный выхлоп в stdout, это позволит в командной строке на уровне пайпов направить логи работы вышего скрипта в разные файлы или потоки;
    9. не рассчитывайте, что ваш код будет работать вечно и стабильно. Сейчас у вас период бэкапа нестабильный, зависит от продолжительности самого бэкапа - это, как минимум, странно и неожиданно. Я бы такую штуку сделал простой и одношговой, то есть при запуске утилита делает один единственный бэкап и завершается с ошибкой, если что-то пошло не так. Это позволит занести её в crontab или в планировщик задач, а результаты работы и успешность запуска оценивать внешними механизмами;
    10. старайтесь всегда делать кросс-платформенный код, даже если он вряд ли будет запускаться на других ОС, даже если у вас нет времени протестировать его на разных ОС -- это сформирует у вас хорошую привычку и расширит кругозор, а также позволит не делать лишних специфических костылей.
    Ответ написан