我正在尝试编写一个嵌套的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
答案 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()
创建。
我修复了i
和j
的数学运算,以反映我认为您的意图。
我删除了对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'结构确保变量仅在整个代码块执行后递增,而不是介于两者之间,如代码片段中的情况。