web-dev-qa-db-ja.com

shutil.copyfileを使用すると、Python= IOError:[Errno 13]権限が拒否されました:

pythonコードを使用して、shutil.copyfileを使用します:

import os
import shutil

src='C:\Documents and Settings\user\Desktop\FilesPy'
des='C:\Documents and Settings\user\Desktop\\tryPy\Output'

x=os.listdir(src)
a=os.path.join(src,x[1])

shutil.copyfile(a,des)
print a

それは私にエラーを与えます:

IOError: [Errno 13] Permission denied: 'C:\\Documents and Settings\\user\\Desktop\\tryPy\\Output'

ファイルをコピーする権限がないのはなぜですか?

15
DrDark

documentation からshutil.copyfile

Srcという名前のファイルの内容(メタデータなし)をdstという名前のファイルにコピーします。 dstは完全なターゲットファイル名である必要があります。ターゲットディレクトリパスを受け入れるコピーについては、shutil.copy()を参照してください。 srcとdstが同じファイルの場合、エラーが発生します。宛先の場所は書き込み可能でなければなりません。それ以外の場合は、IOError例外が発生します。 dstがすでに存在する場合は、置き換えられます。キャラクターデバイスやブロックデバイス、パイプなどの特殊ファイルは、この関数ではコピーできません。 srcおよびdstは、文字列として指定されたパス名です。

だからあなたはどちらかを使う必要があると思います shutil.copy またはdesにファイル名を追加:

des = os.path.join(des, x[1])
22
Lev Levitsky

可能であれば、shutil.copyではなくshutil.copyfileを使用することをお勧めします。

Shutil.copyfileでは、書き込み権限などのメタデータを考慮する必要があります。

2
White

私はここですべてのものを試しましたが、私のコードの問題は宛先フォルダーの許可に関するものでした。 dirを作成するための独自の関数を作成しました。

_def mkdirs(newdir,mode=777):
    try:
        os.makedirs(newdir, mode)
    except OSError as err:
        return err
_

777の代わりに、後で8進数値の '0o777'を使用し、後でshutil.copyfile(target_file,dest_file)を使用して、うまくいきました!

これが最初にdirを作成し、次にそこにファイルをコピーする人を助けることを願っています。

1
Ravi Bhanushali