在Python中使用嵌套while循环创建具有子目录的目录
我正在尝试写一个嵌套的 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
你的问题是,在进入内层的 while 循环之前,i
已经被加了一次。你可以通过把 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)
1
当第一次调用 os.makedirs(path1)
时,i
已经被加了一次。如果你用一个循环来写,这段代码不仅会更简洁,而且会更正确。
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()
的调用,因为你使用的是绝对路径,这个调用看起来并不是必须的。