автозаполнение директорий на нескольких уровнях

Развивая тему:

https://ru.stackoverflow.com/questions/1432965/Автозаполнение-директорий/1432977#1432977.

Есть директория 2022: в ней находятся папки

  • 1 квартал
    • Январь
    • Февраль
    • Март
  • 2 квартал . . . .

import os

path_1= r'C:\Users\МВИДЕО\progs\prog3\2022'

for i in os.listdir(path_1):
    path_2 = os.path.join(path_1,i)
    for j in os.listdir(path_2):
        file_name = '{}.docx'.format(j)
        path_3 = os.path.join(path_2,j,j+'.docx')
        print(path_3)
        with open(path_3,'w') as g:
            g.write('hello')

for i in os.listdir(path_1):
    file_name = '{}.docx'.format(i)
    path_2 = os.path.join(path_1,i,i+'.docx')
    with open(path_2,'w') as f:
        f.write('hello')

Задача состоит в том чтобы в каждой папке: как квартала , так и месяца нужно создать .doc с названием папки. Вот так

  • 1 квартал

(1 квартал.docx)

  • Январь

    (Январь.docx) . . .

Представленный мною код это делает, однако срабатывает только 1 раз. И если поменять циклы местами, то также выдаст ошибку. При повторном запуске выдает ошибку :

[Errno 2] No such file or directory: 'C:\Users\МВИДЕО\progs\prog3\2022\I квартал\I квартал.docx\I квартал.docx.docx' File "C:\Users\МВИДЕО\progs\prog2\ch_2.py", line 104, in with open(path_3,'w') as g:

Я так понимаю, что при переходах из одной директории в другую имена .docx дописываются даже к уже существующему на предыдущем уровне .docx (реальному ворд документу), но так как это не директория выходит ошибка.

Предполагал, что удалю все такие docx.docx и будет работать. Но из всего что читал ничего не помогло

Из того что я прочитал на эту тему: через isdir,isfile - при запуске просто все отправляет в False. unlink соответственно бесполезен.

через endwith - тоже не находит ни одного файла.

что мне нужно поправить? Ну и вообще, может есть методика по быстрому формированию папок. Например дальше мне потребуется внутри каждого месяца добавить папки с неделями. и в каждой тоже свои документы и т.д.

Заранее благодарю!


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

Автор решения: convair36

Получилось!

path_1= r'C:\Users\МВИДЕО\progs\prog3\2022'

dirs = list(os.walk(path_1))
second_level = dirs[0][1]
#выборка кварталов


for i in second_level:
    file_name = '{}.docx'.format(i)
    path_2 = os.path.join(path_1,i,i+'.docx')
    with open(path_2,'w') as f:
        f.write('hello')
# создание doc для каждого квартала

a=[]
for path,subdir,files in os.walk(path_1):
    for name in subdir:
        a.append((os.path.join(path,name).split(",")))
a=a[4:]
a_1 =sum(a,[])
# разбивка месяцев (получение итоговой директории для каждого месяца)


for i in range(len(a_1)):
    os.chdir(a_1[i])
    aa = a_1[i]
    ab =aa.split('\\')[-1]
    file_name = '{}.docx'.format(ab)
    p = os.path.join(a_1[i],ab+'.docx')
    with open(p,'w') as f:
        f.write('')
# создание doc для каждого месяца
→ Ссылка