【发布时间】:2021-08-18 21:12:06
【问题描述】:
我正在尝试在 Python 上创建多个目录,为列表 loadcase_id_full 中的每个元素创建一个目录,该目录简单地定义为:[1,2,3,4,5]。
我尝试了以下方法:
import os
import yaml
from pathlib import Path
this_dir = Path(__file__).parent
top_dir = this_dir.parent
base_dir = top_dir / 'tmp'
with open(path_to_acc_matrix) as f:
var = yaml.safe_load(f)
# Extracting the data in lists of a size equal to the number of load cases (usually 5)
loadcase_id_full = var['acceleration_matrix'][4]
path_to_new_dirs = top_dir / 'templates' / 'tests' / 'data'
path_iter = 1
path_iter = str(path_iter)
pathname = 'QS-' + path_iter
directory = path_to_new_dirs / pathname
for index in loadcase_id_full :
if not os.path.exists(directory):
os.makedirs(directory)
path_iter = index
path_iter = str(path_iter)
pathname = 'QS-' + path_iter
directory = base_dir / pathname
print(directory)
这只会创建第一个目录(所以从循环外定义的“目录”变量......) 打印功能显示我想要的路径是正确的:
/users/develop/tmp/QS-1
/users/develop/tmp/QS-2
/users/develop/tmp/QS-3
/users/develop/tmp/QS-4
/users/develop/tmp/QS-5
但它并没有创造它们。如果我将 os.mkdirs 放在循环的末尾,它不会创建任何目录。有谁知道如何解决这个问题?
提前感谢您的帮助! :)
【问题讨论】:
-
我没有说exist_ok 解决了它:我说你可以这样避免if 语句。
-
@Rafael-WO 这是 pathlib 的一个特性
-
是的,但是没有我们无法运行的完整示例,我们不得不猜测。如果我们猜错了,我们不会重现您的问题。更重要的是,您也应该运行您在此处发布的确切代码,以确保它确实包含您的问题。
-
为什么要在创建目录之后设置循环中的所有变量?
-
@Barmar 这肯定是过头了。一行
directory = base_dir / f'QS-{index}'就足够了。