1638865800
Python shutil.copyfile()は、ソースファイルのコンテンツを宛先ファイルにコピーするために使用される組み込みメソッドです。Pythonのshutilモジュールは、ファイルおよびファイルのコレクションに対する高レベルの操作の多くの機能を提供します。これは、Pythonの標準ユーティリティモジュールに含まれています。shutilモジュールは、ファイルとディレクトリのコピーと削除のプロセスを自動化するのに役立ちます。
Python copyfile()関数は、srcという名前のファイルの内容(メタデータなし)を、可能な限り最も効率的な方法でdstという名前のファイルにコピーします。
SRCとDSTは、パスのような文字列として指定したオブジェクトまたはパス名です。
DSTファイルは、完全なターゲットファイル名でなければなりません。copy()を調べて、ターゲットディレクトリパスを受け入れるコピーを探します。
場合はSRCとDSTは、同じファイルを指定し、SameFileErrorが発生します。
宛先は書き込み可能である必要があります。そうしないと、OSError例外が発生します。
dstファイルがその場所にすでに存在する場合は、置き換えられます。
文字またはブロックデバイスやパイプなどの特定のファイルは、copyfile()関数を使用してコピーすることはできません。
follow_symlinksがfalseで、srcがシンボリックリンクの場合、srcが指すファイルをコピーする代わりに、新しいシンボリックリンクが作成されます。
shutil.copyfile(src, dst)
SRCのパラメータをコピーしてする必要があり、ソースファイルのパスです
DSTのパラメータは、ファイルがコピーされた場所に配置されている先のファイルパス、です。
では、Python3でファイルをコピーするための簡単な手順をいくつか実行します。
srcファイルに移動してターミナルを開き、次のコマンドを入力してフルパスを取得します。
pwd
➜ test pwd
/Users/krunal/Desktop/code/pyt/test
さて、私はsrcファイルのフォルダにいます。それでは、次のコマンドを使用して、現在のフォルダの内容を確認しましょう。
ls
このコマンドは、現在のフォルダ内のファイルとディレクトリを一覧表示します。
➜ test ls
app.py platform
index.py server-22-Apr-2020.py
つまり、3つのファイルと1つのフォルダーがあります。
app.py ファイルをコピーして 、プラットフォームフォルダー内に配置する必要が あり ます。
これは、srcファイルのパスが次のとおりであることを意味します。
/Users/krunal/Desktop/code/pyt/test/app.py
宛先ファイルパスまたはdstパスは、プラットフォームフォルダー内に あり ます。それでは、プラットフォームフォルダの中に入りましょう。
cd platform
次に、次のコマンドを使用して、プラットフォームフォルダーへのフルパスを取得します。
pwd
➜ platform pwd
/Users/krunal/Desktop/code/pyt/test/platform
私たちのDSTフォルダがあるプラットフォーム。ただし、dstファイルは異なります。これは、app.pyファイルの新しいコピーです。
それでは、コピーしたファイル名をcp.pyに設定しましょう。
したがって、dstファイルのパスは次のとおりです。
/Users/krunal/Desktop/code/pyt/test/platform/cp.py
これで、2つのフルパスができました。
Pythonでファイルをコピーするために必要なのはこれだけです。
それでは、プラットフォームフォルダ内のファイルを見てみましょう。
➜ platform ls
1.py
➜ platform
つまり、プラットフォームフォルダー内には1.pyという ファイルが1つだけ あります 。
ファイルをコピーすると、フォルダーに2つのファイルが作成されます。1.pyとその他のコピーされたファイルです。
これで、srcパスとdstパスができたので、ファイルをコピーするコードを記述できます。
index.pyファイル内に次のコードを 記述し ます。
# index.py
import shutil
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test/platform/cp.py'
shutil.copyfile(src, dst)
print('The file is successfully copied')
➜ test python3 index.py
The file is successfully copied
次に、プラットフォームフォルダ内に移動し ます。
➜ test cd platform
➜ platform
次のコマンドを使用してファイル名を一覧表示します。
➜ platform ls
1.py cp.py
➜ platform
これで、ファイルがコピーされ、そのファイルは cp.pyになります。
プラットフォーム フォルダに手動で移動したくない場合 は、os.listdir()関数を使用できます 。
Python os.listdir()関数は、宛先フォルダーへのパスを取得し、その内容を一覧表示します。
次のコードを参照してください。
# index.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test/platform/cp.py'
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
python3 index.py
['cp.py', '1.py']
ソースと宛先が表す場合、同じファイル ' SameFileError '例外が発生します。
# index.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test/app.py'
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
➜ test python3 index.py
Traceback (most recent call last):
File "index.py", line 7, in <module>
shutil.copyfile(src, dst)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 104, in copyfile
raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
shutil.SameFileError: '/Users/krunal/Desktop/code/pyt/test/app.py' and '/Users/krunal/Desktop/code/pyt/test/app.py' are the same file
➜ test
場合は先がディレクトリである場合、「IsADirectoryError」例外が発生します。
# app.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test'
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
➜ test python3 index.py
Traceback (most recent call last):
File "index.py", line 7, in <module>
shutil.copyfile(src, dst)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: '/Users/krunal/Desktop/code/pyt/test'
➜ test
宛先が書き込み可能でない場合、「PermissionError」例外が発生します。
例外処理は、エラーを処理するための強力なメカニズムであり、プログラムを中断しません。
例外処理にPythonのtry-exceptメカニズムを使用してみましょう。
# index.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test'
try:
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
except shutil.SameFileError:
print("Error: Source and destination represents the same file.")
# If destination is a directory.
except IsADirectoryError:
print("Error: Destination is a directory.")
# If there is any permission issue
except PermissionError:
print("Error: Permission denied.")
# For other errors
except:
print("Error occurred while copying file.")
➜ test python3 index.py
Error: Destination is a directory.
➜ test
このチュートリアルでは、ソースパスと宛先パスを選択し、shutil.copyfile() 関数を使用してPythonでファイルをコピーする方法を説明しました。プログラムの実行中に発生する可能性のある例外と、それらの例外を処理してプログラムを実行し続ける方法を見てきました。
リンク: https://appdividend.com/2020/04/23/python-copy-file-how-to-copy-file-in-python/
1638865800
Python shutil.copyfile()は、ソースファイルのコンテンツを宛先ファイルにコピーするために使用される組み込みメソッドです。Pythonのshutilモジュールは、ファイルおよびファイルのコレクションに対する高レベルの操作の多くの機能を提供します。これは、Pythonの標準ユーティリティモジュールに含まれています。shutilモジュールは、ファイルとディレクトリのコピーと削除のプロセスを自動化するのに役立ちます。
Python copyfile()関数は、srcという名前のファイルの内容(メタデータなし)を、可能な限り最も効率的な方法でdstという名前のファイルにコピーします。
SRCとDSTは、パスのような文字列として指定したオブジェクトまたはパス名です。
DSTファイルは、完全なターゲットファイル名でなければなりません。copy()を調べて、ターゲットディレクトリパスを受け入れるコピーを探します。
場合はSRCとDSTは、同じファイルを指定し、SameFileErrorが発生します。
宛先は書き込み可能である必要があります。そうしないと、OSError例外が発生します。
dstファイルがその場所にすでに存在する場合は、置き換えられます。
文字またはブロックデバイスやパイプなどの特定のファイルは、copyfile()関数を使用してコピーすることはできません。
follow_symlinksがfalseで、srcがシンボリックリンクの場合、srcが指すファイルをコピーする代わりに、新しいシンボリックリンクが作成されます。
shutil.copyfile(src, dst)
SRCのパラメータをコピーしてする必要があり、ソースファイルのパスです
DSTのパラメータは、ファイルがコピーされた場所に配置されている先のファイルパス、です。
では、Python3でファイルをコピーするための簡単な手順をいくつか実行します。
srcファイルに移動してターミナルを開き、次のコマンドを入力してフルパスを取得します。
pwd
➜ test pwd
/Users/krunal/Desktop/code/pyt/test
さて、私はsrcファイルのフォルダにいます。それでは、次のコマンドを使用して、現在のフォルダの内容を確認しましょう。
ls
このコマンドは、現在のフォルダ内のファイルとディレクトリを一覧表示します。
➜ test ls
app.py platform
index.py server-22-Apr-2020.py
つまり、3つのファイルと1つのフォルダーがあります。
app.py ファイルをコピーして 、プラットフォームフォルダー内に配置する必要が あり ます。
これは、srcファイルのパスが次のとおりであることを意味します。
/Users/krunal/Desktop/code/pyt/test/app.py
宛先ファイルパスまたはdstパスは、プラットフォームフォルダー内に あり ます。それでは、プラットフォームフォルダの中に入りましょう。
cd platform
次に、次のコマンドを使用して、プラットフォームフォルダーへのフルパスを取得します。
pwd
➜ platform pwd
/Users/krunal/Desktop/code/pyt/test/platform
私たちのDSTフォルダがあるプラットフォーム。ただし、dstファイルは異なります。これは、app.pyファイルの新しいコピーです。
それでは、コピーしたファイル名をcp.pyに設定しましょう。
したがって、dstファイルのパスは次のとおりです。
/Users/krunal/Desktop/code/pyt/test/platform/cp.py
これで、2つのフルパスができました。
Pythonでファイルをコピーするために必要なのはこれだけです。
それでは、プラットフォームフォルダ内のファイルを見てみましょう。
➜ platform ls
1.py
➜ platform
つまり、プラットフォームフォルダー内には1.pyという ファイルが1つだけ あります 。
ファイルをコピーすると、フォルダーに2つのファイルが作成されます。1.pyとその他のコピーされたファイルです。
これで、srcパスとdstパスができたので、ファイルをコピーするコードを記述できます。
index.pyファイル内に次のコードを 記述し ます。
# index.py
import shutil
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test/platform/cp.py'
shutil.copyfile(src, dst)
print('The file is successfully copied')
➜ test python3 index.py
The file is successfully copied
次に、プラットフォームフォルダ内に移動し ます。
➜ test cd platform
➜ platform
次のコマンドを使用してファイル名を一覧表示します。
➜ platform ls
1.py cp.py
➜ platform
これで、ファイルがコピーされ、そのファイルは cp.pyになります。
プラットフォーム フォルダに手動で移動したくない場合 は、os.listdir()関数を使用できます 。
Python os.listdir()関数は、宛先フォルダーへのパスを取得し、その内容を一覧表示します。
次のコードを参照してください。
# index.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test/platform/cp.py'
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
python3 index.py
['cp.py', '1.py']
ソースと宛先が表す場合、同じファイル ' SameFileError '例外が発生します。
# index.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test/app.py'
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
➜ test python3 index.py
Traceback (most recent call last):
File "index.py", line 7, in <module>
shutil.copyfile(src, dst)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 104, in copyfile
raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
shutil.SameFileError: '/Users/krunal/Desktop/code/pyt/test/app.py' and '/Users/krunal/Desktop/code/pyt/test/app.py' are the same file
➜ test
場合は先がディレクトリである場合、「IsADirectoryError」例外が発生します。
# app.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test'
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
➜ test python3 index.py
Traceback (most recent call last):
File "index.py", line 7, in <module>
shutil.copyfile(src, dst)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: '/Users/krunal/Desktop/code/pyt/test'
➜ test
宛先が書き込み可能でない場合、「PermissionError」例外が発生します。
例外処理は、エラーを処理するための強力なメカニズムであり、プログラムを中断しません。
例外処理にPythonのtry-exceptメカニズムを使用してみましょう。
# index.py
import shutil
import os
src = '/Users/krunal/Desktop/code/pyt/test/app.py'
dst = '/Users/krunal/Desktop/code/pyt/test'
try:
shutil.copyfile(src, dst)
print(os.listdir('/Users/krunal/Desktop/code/pyt/test/platform'))
except shutil.SameFileError:
print("Error: Source and destination represents the same file.")
# If destination is a directory.
except IsADirectoryError:
print("Error: Destination is a directory.")
# If there is any permission issue
except PermissionError:
print("Error: Permission denied.")
# For other errors
except:
print("Error occurred while copying file.")
➜ test python3 index.py
Error: Destination is a directory.
➜ test
このチュートリアルでは、ソースパスと宛先パスを選択し、shutil.copyfile() 関数を使用してPythonでファイルをコピーする方法を説明しました。プログラムの実行中に発生する可能性のある例外と、それらの例外を処理してプログラムを実行し続ける方法を見てきました。
リンク: https://appdividend.com/2020/04/23/python-copy-file-how-to-copy-file-in-python/