Привет, я пытаюсь создать небольшой инструмент, который будет создавать дочерние каталоги в корневом каталоге

Корневой каталог (python) и дочерний каталог (DS, WEB, Flask, Learn) и тому подобное

Вначале я сделал это статически Вот код

import os

web = "Web"
Ds = "Data-structures"
Learn = "Learn"
tools = "Tools"

list1 = []
var = int(input("Enter number of Dir:- "))
for x in range(0, var):
    Lang = input("Enter Lang:- ")
    list.append(Lang)


for i in list1:
    os.system(
        f'mkdir {i} && cd {i} && mkdir {web} && mkdir {Ds} && mkdir {Learn} && mkdir {tools}')

Затем я решил сделать это динамически, используя два списка, как и раньше, но все идет не так. Вот код

import os

A = int(input("Enter number of dirs to be in A Specific languge(Ex:1 or 2):- "))
list1 = []
for x in range(0, A):
    B = input("Enter the Dir name(Ex:- DS, Web..etc):- ")
    list.append(B)
print(list)


C = int(input("Enter number of languages to be In the Dir(Ex:1 or 2):- "))
list2 = []
for x in range(0, C):
    D = input("Enter languges Name(Ex:- python,php,Golang):- ")
    list2.append(D)


for i, j in zip(list2, list1):
    os.system(f'mkdir {i} && cd {i} && mkdir {j} && mkdir {j}')
#tried all combination that I know
#for i in range(0,lis1):
#    for j in list2:
#        os.system(f'mkdir {list2} && cd {list2} && {os.mkdir(list1[i])}')

Поэтому я кое-что пробую, используя вложенный цикл for или цикл while, но я не получил ответа на то, что сделал. во втором коде я не смогу дать for k in range(0, A):, если я дам это выдает мне ошибку A subdirectory or file py already exists. И получить ошибку очевидно, как будто я воссоздаю один и тот же контент снова и снова, используя цикл for

Я хочу создать Root: -Python child's: -Web, DS… и т. д.

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

Пожалуйста, помогите мне

-1
cookie s 2 Май 2021 в 22:59

1 ответ

Лучший ответ

Чтобы побудить пользователя, вы можете создать небольшую функцию, которая просит пользователя вводить значения по порядку.

Например:

def ask_values(prompt, input_msg):
    choices = []
    print(f"{prompt} (press <ENTER> when finished)")
    while True:
        choice = input(input_msg)
        if choice:
            choices.append(choice)
        else:
            return choices

Эта функция будет повторяться бесконечно, пока пользователь не нажмет <ENTER>, а затем вернет значения.

Затем вы можете использовать эту функцию дважды: для каталогов и для языков:

directories = ask_values(
    "Enter the directories",
    "Enter the directory name (ex.: DS, Web, etc.): "
)
print("=> directories:", directories)
print()

languages = ask_values(
    "Enter the languages",
    "Enter the language name (ex.: python, php, go, etc.): "
)
print("=> languages:", languages)
print()

Затем вам нужно перебрать каталоги и языки, чтобы создать древовидную структуру. Не забудьте указать полный путь к корневому каталогу в глобальной переменной (например):

ПРИМЕЧАНИЕ : в этой демонстрации я выбираю текущий рабочий каталог: "."

Решение 1. Использование модуля os:

import os

# Root directory of you directory tree
root_dir = os.path.abspath(".")

print("Creating directories...")
for dir_name in directories:
    for lang in languages:
        path = os.path.join(root_dir, dir_name, lang)
        try:
            os.makedirs(path)
        except FileExistsError:
            pass
print("Done.")

Решение 2. Использование модуля pathlib

import pathlib

# Root directory of you directory tree
root_dir = pathlib.Path(".").absolute()

print("Creating directories...")
for dir_name in directories:
    for lang in languages:
        path = root_dir.joinpath(dir_name, lang)
        path.mkdir(parents=True, exist_ok=True)
print("Done.")
0
Laurent LAPORTE 2 Май 2021 в 20:38