0

我正在尝试编写一个嵌套的 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

4 回答 4

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()因为您使用的是绝对路径,并且调用似乎是不必要的。

于 2013-02-25T22:06:02.660 回答
1

第一次os.makedirs(path1)调用的时间i已经增加。如果你使用了一个 for 循环,那么代码不仅会更干净而且更正确。

于 2013-02-25T21:44:59.847 回答
0

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

然而,更好的解决方案是只使用一个 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)
于 2013-02-25T21:48:14.887 回答
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' 构造确保变量仅在整个代码块执行后才递增,而不是介于两者之间,就像代码片段中的情况一样。

于 2013-02-25T21:50:02.600 回答