Pythonでcopy関数やpopen関数等を使ってファイルをコピーする方法

スポンサーリンク

これまでのチュートリアルで、Pythonのファイル操作(読み込み、書き出し、削除など)について学びました。

この記事では、Pythonでファイルをコピーすることを学びましょう。

Pythonでファイルをコピーするには、以下のモジュールの下でさまざまな方法を使用します。

  • shutil` モジュール
  • os モジュール
  • subprocess モジュール

この記事では、上記のモジュールによって提供されるさまざまなメソッドを使用して、Pythonでファイルをコピーする方法を学習します。

スポンサーリンク

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)
タイトルとURLをコピーしました