2013-02-22 18 views
39

ファイルとサブディレクトリを持つ/ a/b/cというディレクトリがあります。 /x/y/zディレクトリに/ a/b/c/*をコピーする必要があります。どのようなPythonメソッドを使用できますか?ディレクトリの内容をPythonでディレクトリにコピー

私はshutil.copytree("a/b/c", "/x/y/z")を試しましたが、pythonは/ x/y/zを作成しようとし、error "Directory exists"を生成します。

+1

ディレクトリを移動またはコピーしようとしていますか?あなたのタイトルには動きがありますが、あなたのコンテンツにはコピーが含まれています。これらは2つの異なるものなので、あなたが意味するものはまさに重要です。 –

+0

前と後の例を挙げて、エフェクトが欲しいものを明確にすることもできますか? – Xymostech

+0

あなたのコメントをありがとう、私は見出しを更新します。それはコピーであり、移動ではありません。 – prosseek

答えて

72

このコードが動作しています。

from distutils.dir_util import copy_tree 

# copy subdirectory example 
fromDirectory = "https://stackoverflow.com/a/b/c" 
toDirectory = "/x/y/z" 

copy_tree(fromDirectory, toDirectory) 
+1

優れた解決策です。必要な場合は、 'update = 1'をcopy_tree()に追加することをお勧めします。 –

+2

あなたが同じargsのセットに対して2回呼び出すと、copy_treeは失敗し、その間に目的地を一掃したことに気付くだけです。これはmkpathのパスキャッシングによるものです。https://bugs.python.org/issue10948 – yacoob

+0

何があっても既存のファイルをすべて上書きしたい場合はどうすればいいですか? update = 0の場合、この関数は既存のファイルを上書きしますか? – Dmitriy

1

あなたはまた、(**サブフォルダのワイルドカードを使用して)再帰的にすべてのパスを収集するためにglob2を使用して、shutil.copyfileを使用することができ、パスに

glob2を保存リンク:https://code.activestate.com/pypm/glob2/

-4

この関数では、Pythonライブラリは時代遅れです。私は正しく動作するものを作った:

import os 
import shutil 

def copydirectorykut(src, dst): 
    os.chdir(dst) 
    list=os.listdir(src) 
    nom= src+'.txt' 
    fitx= open(nom, 'w') 

    for item in list: 
     fitx.write("%s\n" % item) 

    fitx.close() 

    f = open(nom,'r') 
    for line in f.readlines(): 
     if "." in line: 
      shutil.copy(src+'/'+line[:-1],dst+'/'+line[:-1]) 
     else: 
      if not os.path.exists(dst+'/'+line[:-1]): 
       os.makedirs(dst+'/'+line[:-1]) 
       copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1]) 
      copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1]) 
    f.close() 
    os.remove(nom) 
    os.chdir('..') 
関連する問題