import os
import shutil

def переименновать(старый_путь, новый_путь):
    os.rename(старый_путь, новый_путь)

def переместить(старый_путь, новый_путь):
    shutil.move(старый_путь, новый_путь)

def скопировать_папку(старый_путь, новый_путь):
    shutil.copytree(старый_путь, новый_путь)

def скопировать_файл(старый_путь, новый_путь):
    shutil.copy2(старый_путь, новый_путь)

def список_файлов_и_папок(начальный_путь, сканировать_подпапки=False):
    class Файл:
        def __init__(self, файл: str, папка: str):
            self.путь = os.path.join(папка,файл)
            self.полное_имя = файл
            if "." in файл:
                self.имя, self.расширение = файл.rsplit(".", 1)
            else:
                self.имя = файл
            self.папка_имя = os.path.basename(папка)
            self.папка_путь = папка
    
    if not os.path.exists(начальный_путь):
        return []
    
    проверяемые_пути = [начальный_путь]
    просканированные_пути = []
    файлы = []
    while проверяемые_пути:
        путь = проверяемые_пути.pop()
        просканированные_пути.append(путь)

        содержимое = list(os.walk(путь))
        путь_к_папке, вложенные_папки, вложенные_файлы = содержимое[0]
        if сканировать_подпапки:
            for папка in вложенные_папки:
                проверяемые_пути.append(os.path.join(путь, папка))

        for файл in вложенные_файлы:
            файлы.append(Файл(файл, путь_к_папке))


    return просканированные_пути, файлы
