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

时间:2013-02-25 21:41:03

标签: python directory

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

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     

4 个答案:

答案 0 :(得分:2)

你的一些代码是多余的,并且(正如其他人提到的那样)while会使你的数学混乱。

这是一个更简单,几乎相同的版本:

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()的呼叫,因为您使用的是绝对路径,而且看起来似乎没有必要。

答案 1 :(得分:1)

第一次调用os.makedirs(path1)i已递增。如果你使用了foor循环,那么代码不仅更清晰,而且更正确。

答案 2 :(得分:0)

你的问题是i在输入内部while循环之前已经增加了,你可以通过移动i = i+1行来解决这个问题,这样就可以在while i <= 2行完成{1}}循环。

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

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)

答案 3 :(得分:0)

问题在于循环结构。 这应该可以解决问题:

import subprocess, os

for i in range(0,2):
    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(0,3):
        path1 = r'C:/Users/TEvans/Desktop/Testing/slope%d/r%d' % (i, j)
        if not os.path.exists(path1): os.makedirs(path1) 

'for'结构确保变量仅在整个代码块执行后递增,而不是介于两者之间,如代码片段中的情况。