如何从python中的两个列表创建具有多个子文件夹的多个文件夹

时间:2017-04-22 09:11:38

标签: windows python-2.7

我正在尝试从文本文件中的列表创建多个文件夹(在当前目录中),然后使用另一个列表在每个文件夹内创建多个子文件夹。(我希望这很清楚?)文本文件是大约40个日期的清单。

到目前为止,这是我的代码:

import os, sys



subfolder_names = ['1st Eng', '2nd eng', '3rd Eng', 'Chief Eng', 'Cryo Eng', 'Electrical Eng', 'Master', '1st Mate', '2nd Mate', '3rd Mate']
topfolder_names = []

with open('datelist.txt', 'r') as f:
    for line in f:
        line = line.strip('\n')
        topfolder_names.append(line)

这是我迷路的地方,(因为我真的不知道我在做什么)如何让'topfolder_names'文件夹将'subfolder_names'作为子文件夹?

for topfolder_name in topfolder_names:
    os.makedirs(os.path.join(topfolder_names, subfolder_names))

这是我得到的错误。

Traceback (most recent call last):
  File "C:\Users\Kids\Documents\Visual Studio 2015\Projects\Stormpetrel 
Refit\folder3.py", line 18, in <module>
    os.makedirs(os.path.join(topfolder_names, topfolder_names))
  File "C:\Python27\lib\ntpath.py", line 65, in join
    result_drive, result_path = splitdrive(path)
  File "C:\Python27\lib\ntpath.py", line 116, in splitdrive
    normp = p.replace(altsep, sep)
AttributeError: 'list' object has no attribute 'replace'

由于

更新:我找到了一个似乎有用的解决方案,我使用了嵌套循环。

for topfolder_name in topfolder_names:
    for subfolder_name in subfolder_names:
        os.makedirs(os.path.join(topfolder_name, subfolder_name))

1 个答案:

答案 0 :(得分:0)

os.joinfor top in topfolder_names: for sub in subfolder_names: os.makedirs(os.path.join(top, sub)) 函数一次只能处理一个文件夹名称。您一次性传递了整个子文件夹列表,但这并不起作用。

相反,尝试在子文件夹上添加第二个循环:

itertools.product

您还可以使用for top, sub in itertools.product(topfolder_names, subfolder_names): 将两个循环合并为一个循环。循环将变为:

product

for函数返回一个迭代器,它产生两个元组。 top循环将每个元组的两个值解包为sub和{{1}}。