関数shutil.copytreeを使用して、コンピューター上のローカルサーバーからフォルダーをコピーしたいのですが、今日は問題があります。Pythonは常に同じメッセージ「[エラー1]操作は許可されていません」を表示しますが、昨日はスクリプトは同じフォルダで問題なく動作します...誰かが問題は何ですか、何が起こった可能性があるか教えてもらえますか?
3 に答える
「操作が許可されていません」というエラーの理由は、ソースと宛先が異なるファイルシステム上にある場合に、shutil.copytree (および shutil.copy と shutil.copy2) が奇妙な動作をするという事実である可能性があります。
たとえば、python2.7 を使用して ubuntu で ext3 から ntfs ボリュームにファイルをコピーしようとしたときに、shutil.copy で問題が発生しました。代わりにshutil.copyfileを使用しました。
shutil.copytree について言えば、この回答を見てください。気に入っています。独自のコピーツリーを作成してください。
既存のディレクトリをコピーしようとしているのは私の推測です。
ドキュメントから
shutil.copytree = copytree(src, dst, symlinks=False, ignore=None) copy2() を使用してディレクトリ ツリーを再帰的にコピーします。
The destination directory must not already exist.
最後の行に注意してください。
検証する MAC OS マシンはありませんが、宛先ディレクトリが存在すると推測しています。同様のエラーが発生する私のLinuxマシンで何が起こるかを次に示します
$ mkdir test1
$ touch test1/a
$ touch test1/b
次に、インタラクティブインタープリターで
>>> from shutil import copytree
>>> copytree("test1","test2")
>>> copytree("test1","test2")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/shutil.py", line 175, in copytree
os.makedirs(dst)
File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 17] File exists: 'test2'
エラー コードは、ソースの読み取り権限または宛先への書き込み権限がないことを示しています。ファイルとフォルダーのアクセス許可の設定は変更されましたか?