高橋  花子

高橋 花子

1638865800

Python3でファイルをコピーする

Python shutil.copyfile()は、ソースファイルのコンテンツを宛先ファイルにコピーするために使用される組み込みメソッドです。Pythonのshutilモジュールは、ファイルおよびファイルのコレクションに対する高レベルの操作の多くの機能を提供します。これは、Pythonの標準ユーティリティモジュールに含まれています。shutilモジュールは、ファイルとディレクトリのコピーと削除のプロセスを自動化するのに役立ちます。

Pythonコピーファイル

Python copyfile()関数は、srcという名前のファイルの内容(メタデータなし)を、可能な限り最も効率的な方法でdstという名前のファイルにコピーします。

SRCDSTは、パスのような文字列として指定したオブジェクトまたはパス名です。

DSTファイルは、完全なターゲットファイル名でなければなりません。copy()を調べて、ターゲットディレクトリパスを受け入れるコピーを探します。

 

場合はSRCDSTは、同じファイルを指定し、SameFileErrorが発生します。

宛先は書き込み可能である必要があります。そうしないと、OSError例外が発生します。

 

dstファイルがその場所にすでに存在する場合は、置き換えられます。

文字またはブロックデバイスやパイプなどの特定のファイルは、copyfile()関数を使用してコピーすることはできません。

follow_symlinksがfalseで、srcがシンボリックリンクの場合、srcが指すファイルをコピーする代わりに、新しいシンボリックリンクが作成されます。

構文

shutil.copyfile(src, dst)

パラメーター

SRCのパラメータをコピーしてする必要があり、ソースファイルのパスです

DSTのパラメータは、ファイルがコピーされた場所に配置されている先のファイルパス、です。

Pythonでファイルをコピーする手順

では、Python3でファイルをコピーするための簡単な手順をいくつか実行します。

ステップ1:srcファイルがあるフォルダーに移動します。

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

ステップ2:dst(destination)パスを取得する

宛先ファイルパスまたは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つのフルパスができました。

  1. src
  2. dst

Pythonでファイルをコピーするために必要なのはこれだけです。

ステップ3:dstパスの内容を確認する

それでは、プラットフォームフォルダ内のファイルを見てみましょう。

➜  platform ls
1.py
➜  platform

つまり、プラットフォームフォルダー内に1.pyという ファイルが1つだけ あります 。

ファイルをコピーすると、フォルダーに2つのファイルが作成されます。1.pyとその他のコピーされたファイルです。

ステップ4:Pythonでファイルをコピーするコードを書く

これで、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 '例外が発生します。

Pythonの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」例外が発生します。

Pythonの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」例外が発生します。

shutil.copyfile()メソッドの使用中のエラーの処理

例外処理は、エラーを処理するための強力なメカニズムであり、プログラムを中断しません。

例外処理に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/

#python 

What is GEEK

Buddha Community

Python3でファイルをコピーする
高橋  花子

高橋 花子

1638865800

Python3でファイルをコピーする

Python shutil.copyfile()は、ソースファイルのコンテンツを宛先ファイルにコピーするために使用される組み込みメソッドです。Pythonのshutilモジュールは、ファイルおよびファイルのコレクションに対する高レベルの操作の多くの機能を提供します。これは、Pythonの標準ユーティリティモジュールに含まれています。shutilモジュールは、ファイルとディレクトリのコピーと削除のプロセスを自動化するのに役立ちます。

Pythonコピーファイル

Python copyfile()関数は、srcという名前のファイルの内容(メタデータなし)を、可能な限り最も効率的な方法でdstという名前のファイルにコピーします。

SRCDSTは、パスのような文字列として指定したオブジェクトまたはパス名です。

DSTファイルは、完全なターゲットファイル名でなければなりません。copy()を調べて、ターゲットディレクトリパスを受け入れるコピーを探します。

 

場合はSRCDSTは、同じファイルを指定し、SameFileErrorが発生します。

宛先は書き込み可能である必要があります。そうしないと、OSError例外が発生します。

 

dstファイルがその場所にすでに存在する場合は、置き換えられます。

文字またはブロックデバイスやパイプなどの特定のファイルは、copyfile()関数を使用してコピーすることはできません。

follow_symlinksがfalseで、srcがシンボリックリンクの場合、srcが指すファイルをコピーする代わりに、新しいシンボリックリンクが作成されます。

構文

shutil.copyfile(src, dst)

パラメーター

SRCのパラメータをコピーしてする必要があり、ソースファイルのパスです

DSTのパラメータは、ファイルがコピーされた場所に配置されている先のファイルパス、です。

Pythonでファイルをコピーする手順

では、Python3でファイルをコピーするための簡単な手順をいくつか実行します。

ステップ1:srcファイルがあるフォルダーに移動します。

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

ステップ2:dst(destination)パスを取得する

宛先ファイルパスまたは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つのフルパスができました。

  1. src
  2. dst

Pythonでファイルをコピーするために必要なのはこれだけです。

ステップ3:dstパスの内容を確認する

それでは、プラットフォームフォルダ内のファイルを見てみましょう。

➜  platform ls
1.py
➜  platform

つまり、プラットフォームフォルダー内に1.pyという ファイルが1つだけ あります 。

ファイルをコピーすると、フォルダーに2つのファイルが作成されます。1.pyとその他のコピーされたファイルです。

ステップ4:Pythonでファイルをコピーするコードを書く

これで、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 '例外が発生します。

Pythonの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」例外が発生します。

Pythonの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」例外が発生します。

shutil.copyfile()メソッドの使用中のエラーの処理

例外処理は、エラーを処理するための強力なメカニズムであり、プログラムを中断しません。

例外処理に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/

#python