2017-04-22 18 views
1

テキストファイルのリストから複数のフォルダ(カレントディレクトリ)を作成しようとしていて、テキストファイルは約40の日付のリストです。ここで複数のサブフォルダを持つ複数のフォルダをPythonの2つのリストから作成するには

は、これまでの私のコードです:

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) 

私は迷子場所(私は本当に私がやっているものを知らないとして)これはどのようにi「はsubfolder_namesを持っている "topfolder_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' 

おかげ

UPDATE:私は、私は、ネストされたループを使用し、動作するように思われる解決策を見つけました。

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

答えて

0

os.makedirsos.join機能することができます一度に単一のフォルダ名の各作業のみ。サブフォルダのリスト全体を一度に渡していますが、これはうまくいきません。

代わりに、サブフォルダの上に第2のループを追加してみてください:

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関数は、2つのタプルを生成するイテレータを返します。 forループは、各タプルの2つの値をtopsubにアンパックします。

+0

返事ありがとう、私は私が見つけた修正で私のポストを更新する前にこれを見ていない、私はあなたが2番目のループと言うように終わった。とても有難い。 – Aiden

関連する問題