Что не так с параметрами функций?

Использую модуль shutil и в функции shutil.copy2 os.path.join() ругается на аргументы:

import os
import time
import shutil

class FileSorter:

    def __init__(self, folder_name):
        self.folder = folder_name
        self.full_time = None
        self.output_path = None
        self.path = os.path.normpath(os.path.dirname(__file__))

        def sorting(self):
    os.makedirs(os.path.join(self.path, "icons_by_year"), exist_ok=True)
    for i in os.walk(top=os.path.join(self.path, self.folder)):
        for file in i:
            secs = os.path.getmtime(file)
            self.full_time = time.gmtime(secs)
            if os.path.join(self.path, "icons_by_year", str(self.full_time[0]), str(self.full_time[1])):
                shutil.copy2(src=os.path.join(os.path.dirname(file), file),
                             dst=os.path.join(self.path, "icons_by_year", str(self.full_time[0]),
                                              str(self.full_time[1]), file))
                #  после обьявления self.path функция ругается на неправильные аргументы, хотя пути вроде верные
                # TODO В join нужно передавать строки или пути, а передаётся  число.
            else:
                os.makedirs(os.path.join(self.path, "icons_by_year", str(self.full_time[0]), str(self.full_time[1])))
                shutil.copy2(src=os.path.join(os.path.dirname(file), file),
                             dst=os.path.join(self.path, "icons_by_year", str(self.full_time[0]),
                                              str(self.full_time[1]), file))
folder = FileSorter(folder_name='icons')
folder.sorting()

введите сюда описание изображения


Ответы (1 шт):

Автор решения: CrazyElf
if os.path.join(self.path, "icons_by_year", self.full_time[0], self.full_time[1]):
                                            ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
    shutil.copy2(src=os.path.join(os.path.dirname(file), file),
                 dst=os.path.join(self.path, "icons_by_year", str(self.full_time[0]),
                                  str(self.full_time[1]), file))                  
                                  ^^^^^^^^^^^^^^^^^^^^^^      ^^^^^^^^^^^^^^^^^^^^^^

Вот вы когда используете shutil преобразовываете self.full_time[0] в строку. А когда чуть выше проверяете в if, то не преобразовываете, у вас там int. Скорее всего os.path.join ругается именно на это. С self.full_time[1] - тоже самое. Преобразуйте в строку через str(...) оба эти значения, как вы это делаете ниже.

Про вторую ошибку я что-то не разобрался, сначала написал, потом удалил.

→ Ссылка