これまでのチュートリアルで、Pythonのファイル操作(読み込み、書き出し、削除など)について学びました。
この記事では、Pythonでファイルをコピーすることを学びましょう。
Pythonでファイルをコピーするには、以下のモジュールの下でさまざまな方法を使用します。
- shutil` モジュール
-
os
モジュール -
subprocess
モジュール
この記事では、上記のモジュールによって提供されるさまざまなメソッドを使用して、Pythonでファイルをコピーする方法を学習します。
この記事もチェック:Pythonでopenメソッドを使用してファイルを開く方法
1. Python でファイルをコピーする shutil モジュール
shutil` モジュールは、Python でファイルをコピーしたり、削除したりするための使いやすいメソッドをいくつか提供しています。
ここでは、このモジュールで定義されている、特にコピーに使用される様々なメソッドを見てみましょう。
1. copyfileobj()
copyfileobj()` メソッドは、それぞれのファイルオブジェクトを使用してソースファイルの内容をターゲットファイルにコピーします。
以下のコードを見てみましょう。
import shutil
src_file_obj = open ( 'src.txt' , 'rb' )
targ_file_obj = open ( 'targ.txt' , 'wb' )
shutil.copyfileobj( src_file_obj , targ_file_obj ) |
注意: コンテンツ全体をコピーするためには、ファイルオブジェクトはソースファイルとターゲットファイルの両方の 0 位置 (開始位置) を指している必要があります。
2. copyfile()
copyfile()`メソッドは、ファイルパスを用いてソースファイルからターゲットファイルにコンテンツをコピーします。
import shutil
shutil.copyfile( 'src.txt' , 'targ.txt' )
|
このメソッドでは、ファイルパスのみを使用でき、ディレクトリは使用できないことに留意してください。
3. copy()
このメソッドは、ソースファイルをターゲットファイルまたはターゲットディレクトリにコピーします。
copyfile()とは異なり、
copy()メソッドはターゲットディレクトリを引数として用いることができ、ファイルのパーミッションもコピーされます。
copy()` は、内容をコピーした後のターゲットファイルへのパスを返します。
import shutil
shutil.copy( '/Users/test/file.txt' , '/Users/target/' )
|
コピー先のディレクトリ ‘/Users/test/file.txt’ からすべての内容とパーミッションをコピーした ‘file.txt’ という名前のファイルが作成されます。
4. copy2()
copy2()メソッドは
copy()メソッドと全く同じ方法で使用されます。
また、copy2()`がソースファイルからメタデータもコピーすることを除けば、同じように機能します。
import shutil
shutil.copy2( '/Users/test/file.txt' , '/Users/target/' )
|
2. Python でファイルをコピーする os モジュール
1. popen()
popen()` メソッドはコマンド cmd へのパイプを作成します。
このメソッドは cmd パイプに接続されたファイルオブジェクトを返します。
以下のコードを見てください。
#for Windows import os
os.popen( 'copy src.txt targ.txt' )
|
#for Linux import os
os.popen( 'cp src.txt targ.txt' )
|
このメソッドを使うと、ファイルのコピーだけでなく、他の通常のコマンドの実行も可能です。
2. system()
system()`メソッドは、サブシェル内のコマンド引数を直接呼び出して実行します。
その戻り値は、プログラムを実行するOSに依存します。
#for Linux import os
os.system( ' cp src.txt targ.txt' )
|
#for Windows import os
os.system( ' copy src.txt targ.txt' )
|
3. Pythonでファイルをコピーするsubprocessモジュール
1. call()
call()メソッドは
os.system()` と同様に、引数として渡されたコマンドを直接呼び出したり実行したりします。
# In Linux import subprocess
subprocess.call( 'cp source.txt target.txt' , shell = True )
|
# In Windows import subprocess
subprocess.call( 'copy source.txt target.txt' , shell = True )
|