【问题标题】:mkdir within a loop [closed]循环内的 mkdir [关闭]
【发布时间】: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}' 就足够了。

标签: python mkdir


【解决方案1】:

这是代码的简化版本,希望能避免混淆并满足创建多个目录的需要。

from pathlib import Path


top_dir = Path('ENTER YOUR DATA PATH HERE')
base_dir = Path('ENTER YOUR BASE PATH HERE')
loadcase_id_full = ['ENTER YOUR LIST VALUES HERE', '...']

path_to_new_dirs = top_dir / 'templates' / 'tests' / 'data'
path_to_new_dirs.mkdir(exist_ok=True, parents=True)

for index in loadcase_id_full:
    directory = base_dir / f'QS-{index}'
    print(directory)
    directory.mkdir(exist_ok=True, parents=True)

【讨论】:

  • 问题源于base_dir / "tmp" 不存在。你的 base_dir 做到了。这就是为什么我问你的父路径是否存在。很高兴这是罪魁祸首。如果你能接受这个作为你的 OP 的答案,那就太好了。
猜你喜欢
  • 2016-03-14
  • 2014-03-22
  • 1970-01-01
  • 2018-12-02
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
相关资源
最近更新 更多