0

我想使用 os.makedirs 创建目录结构。我尝试使用大括号扩展,它部分工作:

for x in list(braceexpand('/Users/admin/Desktop/{cat,dog,bird}/{thing1,thing2,thing3,thing4}')): os.makedirs(x,exist_ok=True)

但是,我不想手动创建名为“cat”、“dog”和“bird”的目录,而是想通过从列表中创建结构来自动化该过程。

animals = [ 'cat', 'dog', 'bird']

这是因为我有时只需要中间目录“dog”,有时需要“dog”和“cat”,有时需要全部三个。因此,如果能够根据列表包含的任何动物子集创建目录结构,那就太好了。

到目前为止,我还无法实现这一点(使用列表扩展括号)。

在此处的答案(python glob 中的 Brace 扩展)的帮助下,我能够使用嵌套 for 循环和下面的代码创建我想要的目录结构。

for x in ['/Users/admin/Desktop/{s}/{b}'.format(b=b,s=s) for b in ['thing1','thing2','thing3','thing4'] for s in ['cat', 'dog', 'bird']]: os.makedirs(x,exist_ok=True)

但我喜欢支架扩展的可读性,所以我很好奇是否有人知道如何使用它——或者它是否甚至可以完成。

谢谢!

4

1 回答 1

0

在将字符串传递给之前,您应该能够使用 Python 字符串插值“破解”它braceexpand

names = ['dog', 'cat', 'bird']    
print('/Users/admin/Desktop/{{{}}}/{{thing1,thing2,thing3,thing4}}'.format(','.join(names)))

输出

/Users/admin/Desktop/{dog,cat,bird}/{thing1,thing2,thing3,thing4}

当然也可以为thing1,thing2,...

有关为什么需要{{{}}}{{ ... }}需要的解释,请参阅此答案

于 2019-12-09T14:49:41.827 回答