首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的While循环,用于在Python中创建带有子目录的目录

嵌套的While循环,用于在Python中创建带有子目录的目录
EN

Stack Overflow用户
提问于 2013-02-26 05:41:03
回答 4查看 1.3K关注 0票数 0

我正在尝试编写一个嵌套的while循环,它将创建n个文件夹和n个子目录。我当前代码的问题是创建的第一个文件夹不包含子目录。只有第二个目录包含子目录。我的目标是编写一个使用地下水建模软件运行参数扫描的程序,我需要这些目录来保存结果。

代码语言:javascript
复制
import subprocess, os

i = 1
j = 1
while i <= 2:
    path = r'C:/Users/TEvans/Desktop/Testing/slope%d' % i 
    if not os.path.exists(path): os.makedirs(path)
    os.chdir(path)
    i = i+1
    while j <= 3:
        path1 = r'C:/Users/TEvans/Desktop/Testing/slope%d/r%d' % (i, j)
        if not os.path.exists(path1): os.makedirs(path1)
        j = j+1     
EN

回答 4

Stack Overflow用户

发布于 2013-02-26 06:06:03

您的一些代码是冗余的,并且(正如其他人提到的) while会混淆您的数学运算。

下面是一个更简单,几乎等同的版本:

代码语言:javascript
复制
import os
for i in (1,2):
  for j in (1,2,3):
    path1 = r'C:/Users/TEvans/Desktop/Testing/slope%d/r%d' % (i, j)
    if not os.path.exists(path1): os.makedirs(path1)

  • 在外部循环中删除了对os.makedirs()的调用,因为这些目录将由内部循环的os.makedirs()创建。
  • 我修复了ij的数学运算,以反映我认为您想要的结果。
  • 我删除了对os.chdir()的调用,因为您使用的是绝对路径,而调用看起来不是绝对路径
票数 2
EN

Stack Overflow用户

发布于 2013-02-26 05:45:00

当第一次调用os.makedirs(path1)时,i已经递增。如果你使用foor循环,代码不仅会更干净,而且更正确。

票数 1
EN

Stack Overflow用户

发布于 2013-02-26 05:48:15

您的问题是,在进入内部while循环之前,i已经递增了,您可以通过移动i = i+1行来解决这个问题,这样它就是while i <= 2循环中完成的最后一件事。

然而,更好的解决方案是只使用for循环:

代码语言:javascript
复制
for i in range(1, 3):
    path = r'C:/Users/TEvans/Desktop/Testing/slope%d' % i 
    if not os.path.exists(path): os.makedirs(path)
    os.chdir(path)
    for j in range(1, 4):
        path1 = r'C:/Users/TEvans/Desktop/Testing/slope%d/r%d' % (i, j)
        if not os.path.exists(path1): os.makedirs(path1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15077024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档