@MaxShell

Что можно улучшить в моем коде на Python?

У меня есть такой код:
from os import access, F_OK
from os import listdir, chdir, getcwd
from os import mkdir
from os import environ
from os.path import isdir, isfile
from os.path import exists
import tarfile
import logging
import json

def main():

    NAME_FILE_WITH_ARCHIVES = "archives"
    NAME_FILE_WITH_SETTINGS = "settings.json"

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    settings = {
            "paths" : [],
            }


    logging.info("Проверка существования файла с путями до файлов.")
    if not exists(NAME_FILE_WITH_SETTINGS):
        # Создание файла
        logging.info("Файл не найден, попытка создать.")
        try:
            file = open(NAME_FILE_WITH_SETTINGS, "w")
        except OSError:
            logging.critical("Не получилось создать файл.")
            exit(1)
        file.write(json.dumps(settings,
                              ensure_ascii=False,
                              indent=2))
        file.close()
        logging.info("Файл успешно создан.")
    else:
        with open(NAME_FILE_WITH_SETTINGS, "r") as file:
            settings = json.loads(file.read())


    logging.info("Получение путей до файлов.")
    paths = settings["paths"]


    final_paths = list()
    for path in paths:
        final_paths.append(path.replace("~", environ["HOME"]))


    logging.info("Проверка существования каталога для архивов.")
    if not access(NAME_FILE_WITH_ARCHIVES, F_OK):
        logging.info("Каталог не найден, попытка создать.")
        mkdir(NAME_FILE_WITH_ARCHIVES)
        logging.info("Каталог успешно создан")

    
    if len(final_paths) == 0:
        logging.warning("Не прописанны пути до файлов.")
        exit(1)


    logging.info("Проверка существования файлов по путям в настройках")
    for path in final_paths:
        if not exists(path):
            logging.warning(f"Пути {path} несуществует, по этому " \
                    "данный путь добавлен в исключение")


    logging.info("Архивация данных")
    for path in final_paths:
        old_path = getcwd()
        logging.info(f"Выбранный путь для создания архифа: {path}")

        # Проверка на то, путь является каталогом или файлом
        if isdir(path):
            files = listdir(path)
            transformed_name = "archive" + path.replace("/", "_", -1) + ".tar.gz"

            logging.info(f"Название архива: {transformed_name}")
            with tarfile.open(f"{NAME_FILE_WITH_ARCHIVES}/{transformed_name}", "w:gz") as tar_file:
                chdir(path)
                for file in files:
                    logging.info(f"Архивация файла: {file}")
                    tar_file.add(file)
                tar_file.close()
        if isfile(path):
            transformed_name = "archive" + path.replace("/", "_", -1) + ".tar.gz"
            with tarfile.open(f"{NAME_FILE_WITH_ARCHIVES}/{transformed_name}", "w:gz") as tar_file:
                tar_file.add(path)
                tar_file.close()
        chdir(old_path)

    logging.info("Архивы созданны")
    pass


if __name__ == "__main__":
    main()


Какую критику можете дать по этому коду?
Что нужно переписать?
Что улучшить?

Этот код нужен чисто для практики новичку Python.
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
@Everything_is_bad
скорми код линтерам, тому же ruff со всеми правилами, да еще с --preview, узнаешь много нового
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы