在Python中使用嵌套while循环创建具有子目录的目录

0 投票
4 回答
1312 浏览
提问于 2025-04-17 17:05

我正在尝试写一个嵌套的 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() 中创建。

  • 我修正了 ij 的计算,以更好地反映我认为你想要的结果。

  • 我去掉了对 os.chdir() 的调用,因为你使用的是绝对路径,这个调用看起来并不是必须的。

撰写回答