回答:
最初にを呼び出しshutil.copytree、例外がスローされた場合はで再試行することをお勧めしますshutil.copy。
import shutil, errno
def copyanything(src, dst):
try:
shutil.copytree(src, dst)
except OSError as exc: # python >2.5
if exc.errno == errno.ENOTDIR:
shutil.copy(src, dst)
else: raise
shutil.copytree将来、両方のケースを改善および管理する機能が停止するものはありません。4)例外はPythonではそれほど例外ではありません。たとえば、反復はStopIteration例外をスローすることで停止します。
追加するにはTzotさんとGNS答え、ここで再帰的にファイルやフォルダをコピーする別の方法です。(Python 3.X)
import os, shutil
root_src_dir = r'C:\MyMusic' #Path/Location of the source directory
root_dst_dir = 'D:MusicBackUp' #Path to the destination folder
for src_dir, dirs, files in os.walk(root_src_dir):
dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
for file_ in files:
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
os.remove(dst_file)
shutil.copy(src_file, dst_dir)
初めてで、ファイルやフォルダを再帰的にコピーする方法がわからない場合は、これが役立つことを願っています。
shutil.copyそしてshutil.copy2、ファイルをコピーしています。
shutil.copytreeすべてのファイルとすべてのサブフォルダーを含むフォルダーをコピーします。shutil.copytree使用していますshutil.copy2ファイルのコピーにしています。
だからcp -rあなたに言っているのは、フォルダとそのファイル/サブフォルダをターゲットにしてコピーするshutil.copytreeからです。コピーをせずにファイルを実行します。cp -rshutil.copytree-r cpshutil.copyshutil.copy2
shutil.copytree('C:\myfile.txt', 'C:\otherfile')。動かない。それがOPが求めていたものです... 7年前。
Unix cpは「ディレクトリとファイルの両方をサポートしていません」:
betelgeuse:tmp james$ cp source/ dest/
cp: source/ is a directory (not copied).
cpにディレクトリをコピーさせるには、「-r」フラグを使用して、それがディレクトリであることを手動でcpに通知する必要があります。
ただし、ここではいくつかの切断があります- cp -rソースとしてファイル名が渡されると、単一のファイルだけが喜んでコピーされます。copytreeはしません。
pythonのshutil.copytreeメソッドはめちゃくちゃです。私は正しく機能するものを実行しました:
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('..')
copytree、単一のファイルをコピーできるようにするために、Pythonバグトラッカーに拡張リクエストを提出しますか?