Что не так с параметрами функций?
Использую модуль 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(...) оба эти значения, как вы это делаете ниже.
Про вторую ошибку я что-то не разобрался, сначала написал, потом удалил.
