2017-05-27 11 views
1

いくつかのフォルダとファイルをパスから別のパスにコピーします。例えば、私はいくつかの他のサブフォルダとそれ自身の中のいくつかのファイルが別のフォルダ(dst)にあるフォルダ(folder1と呼ばれる)をコピーしたいと思います。私のプログラムでは、まず、宛先フォルダにfolder1という名前のフォルダがあるかどうかをチェックし、そうでない場合はfolder1という名前のフォルダを作成し、folder1の内容をターゲットにコピーします。さらに、ターゲットパスにfolder1があるかもしれませんが、target1に存在しないfolder1のサブフォルダがいくつかあり、そのために再帰関数を使用する必要があります。ここでは、この目的のために、私の再帰関数は次のとおりです。パスから別のパスにpythonの再帰関数を介してフォルダ、サブフォルダとファイルをコピーします。

def CopyFol_Subfolders(src, src_folder, dst): 
    Dir = next(os.walk(src))[1] 
    sub_files = "" 
    sub_files = next(os.walk(src))[2] 
    if not os.path.exists(dst + "/" + src_folder): 
     os.makedirs(dst + "/" + src_folder) 
     shutil.copy2(src + "/" + src_folder, dst + "/" + src_folder) 

    elif os.path.exists(src + "/" + src_folder) and is_exist_file(src+"/"+src_folder,dst+"/"+src_folder,sub_files): 
     copy_files(sub_files, src+"/"+src_folder, dst+"/"+src_folder) 
    else: 
     subfolders = "" 
     subfolders = next(os.walk(src + "/" + src_folder+"/"))[1] 
     for folder in subfolders: 
      CopyFol_Subfolders(src + "/" + src_folder, folder, dst + "/" + src_folder) 

copy_files機能は、私が混同されると、これは動作しませんsrc +"/"+src_folderからdst+"/"+src_folder

にファイルをコピーします。私はshutil.copy2で異なるエラーを受け取りました。それはx is not a fileまたはx is a directoryです。 私の再帰関数のいくつかのチェックロジックをして、この問題が何かを教えてくださいできますか?

答えて

1

os.path.existsの代わりにos.path.isdirを使用して、ファイルではないディレクトリにすることができます。そしてos.path.joinは自分自身でパス文字列を連結するよりも優れています。

def CopyFol_Subfolders(src, dst): 
    for item in os.listdir(src): 
     s = os.path.join(src, item) 
     d = os.path.join(dst, item) 
     if os.path.isdir(s): 
      CopyFol_Subfolders(s, d) 
     else: 
      shutil.copy2(s, d) 
+0

コメントのこの種類の回答スイート。 – Gahan

+0

@Gahanが編集しました。アドバイスをありがとう。 – frankyjuang

+0

これは完全な答えであり、私をとても助けてくれました。ありがとう@frankyjuang – Stateless

関連する問題