はじめに
Pythonを使用してファイルをコピーするには、shutil
os
os
メソッドは、Pythonコードからシェルコマンドを実行できるメソッドで、copy
コマンド(Windows)またはcp
コマンド(Unix)を実行するために使用します。
これらのメソッドの多くは、shutil
os
モジュールの両方で、非常に似た機能を持っています(驚くべきことではあ
shutilモジュールを使用したファイルのコピー
shutilモジュールは、ファイルをコピーするためのいくつかの高レベルの方法を提供しています。 以下は主なものです:
copyfile
このメソッドは、あるファイルの内容を別のファイルにコピーします。 それに提供される宛先は、書き込み可能なファイルであり、ソースファイルとは異なる名前を持つ必要があります。 名前が同じ場合、エラーが生成されます。 コピー先のファイルが既に存在する場合は、新しくコピーされたファイルに置き換えられます。
このメソッドの構文は次のとおりです。
shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)
たとえば、次のコードは”file1″という名前のファイルをコピーします。txt”を”file2″という名前のファイルに入れます。txt”:
import shutilshutil.copyfile('file1.txt', 'file2.txt')
shutil.copyfile
follow_symlinks
False
に設定されていて、ソースファイルがシンボリックリンクである場合、ファイルをコピーする代わりに、新しいシンボリック
copy
この方法はcopyfile
と非常によく似ていますが、主な違いは、ソースファイルの内容をコピーすることに加えて、一歩進んでファ ファイルのアクセス許可をコピーすることは、ほとんどのプログラミング言語では簡単な作業ではないので、これは持っているのはいい機能です。
構文は次のとおりです:
shutil.copy(src_file, dest_file, *, follow_symlinks=True)
これらのパラメータはそれぞれ、copyfile
メソッドと同じです。 たとえば、次のコードは”file1″をコピーします。txt”に”file3.txt”。
import shutilshutil.copy('file1.txt', 'file3.txt')
注:スクリプトには、インポートするモジュールの1つと同じ名前を付けないようにしてください(この記事のコードをテス そうすると、循環インポートの問題のためにそのモジュールをインポートしようとするとエラーが発生します。
copy2
前のメソッドと同様に、copy2
copy
copy2
は失敗を返さず、可能なメタデータだけを保持します。
構文は次のとおりです。
shutil.copy2(src_file, dest_file, *, follow_symlinks=True)
繰り返しますが、これらのパラメータはこれまでに述べた前のコマンドと同じです。たとえば、次のコードは”file1.txt”に”ファイル4.txt”だけでなく、元のファイルのメタデータを保持し、”file1。txt”。上記のコードを実行するとわかるように、”file1.txt”を”file4″にコピーしました。txt”。 ただし、”file1″をコピーしたshutil.copy
とは異なり、作成日が新しいファイルに保存されていることに気づいたかもしれません。txt”から”file3.txt”と新しい作成日を付けました。
copyfileobj
このメソッドは、ソースファイルの内容を、現在のソースファイルの位置からコピー先ファイルにコピーします。 これが意味するのは、ソースファイルオブジェクトからデータを読み取ると、読み取りを停止する位置は、コピーを開始する位置copyfileobj
構文は次のとおりです。
shutil.copyfileobj(src_file_object, dest_file_object)
ソースと宛先ファイルパラメータの意味は、前のコマンドと似ていますが、現在はオブジェクトを参照しています。 Lengthパラメーターはオプションで、コピー処理中にメモリに保持されたバイト数であるバッファサイズを表します。 このオプションは、コピー処理を高速化し、制御されていないメモリ使用量を回避できるため、非常に大きなファイルをコピーするときに便利です。たとえば、次のコードは”file1.txt”に”file5.ご覧のとおり、copyfileobj
を使用するには、ファイルをバイナリモード(「rb」と「wb」の「b」部分)で開く必要があります。 さらに、ソースファイルは読み取り可能として開かれ、宛先ファイルは書き込み可能として開かれなければなりません(それぞれ”r”と”w”の部分)。
osモジュールを使用したファイルのコピー
osモジュールは、オペレーティングシステム機能を使用してファイルをコピーする方法を提供します。 ここからの例のほとんど(すべてではないにしても)では、WindowsとUnixの両方で動作する例を提供します。 例はシェルコマンドが使用されているために異なりますので、Pythonコメントで各関数呼び出しのラベルがどのように表示されるかに注意してくださp>
popen
このメソッドは、コマンドへのパイプまたはコマンドからパイプを開きます。 しかし、このメソッドはPython2.6では非推奨になっていたので、必要がない限り使用することはお勧めしません。 代わりに、Pythonのドキュメントでは、代わりにsubprocessモジュールのメソッドを使用することをお勧めします。
構文は次のとおりです。
os.popen(cmd])
ここで返される値は、パイプに接続されているファイルオブジェクトです。 このオブジェクトは、モードに応じて読み取りまたは書き込みが可能です。 デフォルトのモードは’r’で、ファイルの内容を読み込むことができます。
以下の例では、”file1.txt”に”ファイル6.txt”:
import os# Windowsos.popen('copy file1.txt file6.txt')# Unixos.popen('cp file1.txt file6.txt')
このようにコマンドを実行することは、端末のコマンドラインから直接実行した場合とまったく同じです。
system
このメソッドは、サブシェルで指定されたコマンドを実行します。 これは、UnixとWindowsの両方で利用可能です。 構文は次のとおりです。
os.system(command)
ここでcommand
は、DOSまたはUnixシェルコマンドを含む文字列です。 私たちの場合、ここでcopy
cp
コマンドを配置します。たとえば、次のコードは”file1.txt”に”ファイル7.txt”
import os# Windowsos.system('copy file1.txt file7.txt')# Unixos.system('cp file1.txt file7.txt')
これは前のos.popen
.wait()
os.system
を呼び出す必要があります。
サブプロセスモジュールでファイルをコピーする
サブプロセスモジュールは、os
os.system
os.spawn*
call
check_output
です。 もう一度、Unixシステムの場合、コマンド”file1をコピーします。txtファイル2.txt”は”cp file1″に置き換える必要があります。txtファイル2.txt”。Pythonのドキュメントでは、オペレーティングシステムからコマンドを起動するにはcall
メソッドを使用することをお勧めします。
構文は次のとおりです。
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
args
パラメータにはシェルコマンドが含まれます。 しかし、Pythonのドキュメントでは、shell=True
を使用することはセキュリティ上のリスクである可能性があることを警告しています。
この関数呼び出しを使用すると、次のようにcopyコマンドを実行できます:
import subprocess# Windowsstatus = subprocess.call('copy file1.txt file8.txt', shell=True)# Unixstatus = subprocess.call('cp file1.txt file8.txt', shell=True)
上記の例が示すように、前と同じように、シェルコマンドで文字列を渡すだけです。
期待どおりに、オペレーティングシステムは”file1.txt”という名前のファイルに”file8.txt”。
check_outputメソッド
このメソッドは、シェル内でコマンドを実行することもできます。 これは、デフォルトでstdoutからエンコードされたバイトとしてデータをパイプすることを除いて、subprocess.run
args
パラメータには、使用するシェルコマンドが含まれています。 もう一度、Pythonのドキュメントではshell=True
を使用することを警告しているので、このメソッドは注意して使用してください。
次のコードでは、”file1.txt”から”file9.txt”を使用してcheck_output
コマンド:
import subprocess# Windowsstatus = subprocess.check_output('copy file1.txt file9.txt', shell=True)# Unixstatus = subprocess.check_output('cp file1.txt file9.txt', shell=True)
そして、この記事で示したすべてのコマンドと同様に、これはファイル”file1.txt”を指定した宛先に、”file9.txt”はこちら。
ラップアップ
Pythonは、ファイルをコピーするためのさまざまな方法を提供しますが、そのうちのいくつかはPythonのメソッドセットの一部です。 他の人は、copy
cp
ようなシェルコマンドを利用するシェルでコマンドを実行するためにPythonの強力な
どれがあなたに合っているかわかりませんか?
ここでは、ファイルをコピーするさまざまな方法を紹介したので、それは理解できます。 ファイルをコピーするために使用する方法は完全にあなた次第であり、あなたの特定のニーズに依存します。 ほとんどの場合、shutil
shutil.copy2
それが必要なことをするかどうかを確認してください。