Сначала вы можете сократить код в каждом l oop и привести в порядок с помощью os.path.join
:
for i in folders:
for j in subfolders:
subfolder_path = os.path.join(path, f"folder{i}", f"subfolder{j}")
os.makedirs(subfolder_path)
for k in files:
file_path = os.path.join(subfolderpath, "files-{j}-{k}.txt")
open(file_path, "w")
И затем первые 2 цикла можно превратить в 1 с помощью itertools.product
:
import itertools
for i,j in itertools.product(folders, subfolders):
subfolder_path = os.path.join(path, f"folder{i}", f"subfolder{j}")
os.makedirs(subfolder_path)
for k in files:
file_path = os.path.join(subfolderpath, "files-{j}-{k}.txt")
open(file_path, "w")
Но как насчет создания функции для создания пути к файлу, если он не существует? Тогда мы можем сгущаться до одного для l oop.
def open_and_create(folder_path, file_name, *a):
os.makedirs(folder_path, exist_ok=True)
return open(os.path.join(folder_path, file_name) *a)
for i,j,k in itertools.product(folders, subfolders, files):
subfolder_path = os.path.join(path, f"folder{i}", f"subfolder{j}")
open_and_create(subfolder_path, "files-{j}-{k}.txt", 'w')