Использование Python для создания пустых папок в каталогах пользователей

Я создал скрипт Python для создания новых папок в каталогах пользователей. Это работает хорошо, однако, если программу запустить снова, то она по какой-то причине сделает пустые папки в корневом каталоге. В качестве примера

Рут - Дэйв

  • Джим

  • Боб

После запуска программы один раз

  • Дэйв

---- Наука

---- Английский

---- Математика

  • Джим

---- Наука

---- Английский

---- Математика

  • Боб

---- Наука

---- Английский

---- Математика

После повторного запуска программы (на случай добавления нового пользователя) это происходит

  • Наука

  • Английский

  • Математика

  • Дэйв

---- Наука

---- Английский

---- Математика

  • Джим

---- Наука

---- Английский

---- Математика

  • Боб

---- Наука

---- Английский

---- Математика

Если программу запустить потом еще раз, то работает.

Любая помощь будет оценена по достоинству.

Ta

Код здесь:

import os

currentPath = os.getcwd()
folders = ["English","Science","Maths"]

directory_list = list()
for root, dirs, files in os.walk(currentPath, topdown=False):
    for name in dirs:
        directory_list.append(os.path.join(root, name))

        path = currentPath+"\\"+name

        for i in range(len(folders)):

            try:  
                os.makedirs(path+"/"+folders[i])
            except OSError:  
                print ("Creation of the directory %s failed" % path)
            else:  
                print ("Successfully created the directory %s " % path)

person Neos Nokia    schedule 11.10.2018    source источник
comment
Вы должны убедиться, что при следующем запуске вы удалите предыдущие папки. ИЛИ вы должны проверить, что уже существует, и все, что является новым, добавить только это!!. Прямо сейчас в вашем коде, когда вы снова запускаете новые значения, такие как Science Maths из 1-го запуска, выбираются и, следовательно, искажается файловая структура.   -  person Rahul Agarwal    schedule 11.10.2018
comment
Вам не нужно os.walk, чтобы найти пользовательские каталоги: они все вместе находятся в одной папке. Сделайте прямой список, и вы избежите всех проблем с нисходящим в существующих папках (а не только в тех, которые вы создали ранее).   -  person alexis    schedule 11.10.2018
comment
@RahulAgarwal спасибо за это, однако мне нужно добавить новые папки только в том случае, если там есть существующая папка.   -  person Neos Nokia    schedule 11.10.2018
comment
@alexis, что ты имеешь в виду?   -  person Neos Nokia    schedule 11.10.2018
comment
@NeosNokia У меня есть пример того, что он имеет в виду в моем ответе.   -  person Jake    schedule 11.10.2018


Ответы (1)


Вы должны сначала проверить, существует ли каталог, прежде чем создавать новый с тем же именем.

import os

currentPath = os.getcwd()
folders = ["English","Science","Maths"]

directory_list = list()
for dir in os.listdir(currentPath):

    temp_path = currentPath+"\\"+dir

    if os.path.isdir(temp_path):
        for folder in folders:
            if not os.path.isdir(temp_path+"\\"+folder):
                new_folder = temp_path+"\\"+folder
                try:
                    os.makedirs(temp_path+"\\"+folder)
                except OSError:  
                    print ("Creation of the directory %s failed" % new_folder)
                else:  
                    print ("Successfully created the directory %s " % new_folder)

Мне пришлось немного переписать код, но я проверил это, и это работает!

Я думаю, что запись в переменную path приводила к непреднамеренному поведению, поэтому я переименовал переменную.

person Jake    schedule 11.10.2018
comment
or else it could delete the old folder and everything in it. Это неправда. Вы не можете создать каталог, который уже существует. os.makedirs() проглотит ошибку ОС и продолжит работу. - person alexis; 11.10.2018
comment
Удивительно! Спасибо за помощь. - person Neos Nokia; 11.10.2018
comment
@NeosNokia, если это решение, которое вы искали, вы можете «Принять» ответ. - person Jake; 11.10.2018