我正在尝试从文本文件中的列表创建多个文件夹(在当前目录中),然后使用另一个列表在每个文件夹内创建多个子文件夹。(我希望这很清楚?)文本文件是大约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))
答案 0 :(得分:0)
os.join
和for 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}}。