【问题标题】:Creating directories with OS module使用 OS 模块创建目录
【发布时间】:2021-05-02 19:59:51
【问题描述】:

您好,我正在尝试创建一个小工具,用于在根目录中创建子目录

根目录(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..etc

如果您知道其他方式,您不想使用相同的代码请执行 让我知道

请任何人帮助我

【问题讨论】:

  • 不要使用os.system 使用os.mkdir 和`os.makedirs'
  • plus zip 不会combine 目录,双循环会更好
  • 我确实使用过它,但问题是一旦迭代完成,我想在 Root Dir 中使用它,它会再次检查相同的东西,我尝试了迄今为止我所知道的所有可能性,最后的希望是得到答案你们
  • 不要使用list作为变量名:这是一个内置函数!

标签: python list directory nested-loops


【解决方案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

这个函数会无限循环,直到用户按下&lt;ENTER&gt;,然后返回值。

然后您可以使用此函数两次:用于目录和语言:

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()

然后,您需要遍历目录和语言以创建树结构。 不要忘记在全局变量中指定根目录的完整路径(例如):

注意:在这个演示中,我选择了当前工作目录:“.”

方案一:使用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.")

【讨论】:

  • 非常感谢,我非常感谢它完美运行的工作,多亏了你,我真的在笔记本电脑上打了 5 个小时!
猜你喜欢
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多