Pythonでファイルをコピーする方法

はじめに

Pythonを使用してファイルをコピーするには、shutilososメソッドは、Pythonコードからシェルコマンドを実行できるメソッドで、copyコマンド(Windows)またはcpコマンド(Unix)を実行するために使用します。

これらのメソッドの多くは、shutilosモジュールの両方で、非常に似た機能を持っています(驚くべきことではあ

shutilモジュールを使用したファイルのコピー

shutilモジュールは、ファイルをコピーするためのいくつかの高レベルの方法を提供しています。 以下は主なものです:

copyfile

このメソッドは、あるファイルの内容を別のファイルにコピーします。 それに提供される宛先は、書き込み可能なファイルであり、ソースファイルとは異なる名前を持つ必要があります。 名前が同じ場合、エラーが生成されます。 コピー先のファイルが既に存在する場合は、新しくコピーされたファイルに置き換えられます。

このメソッドの構文は次のとおりです。

shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)

たとえば、次のコードは”file1″という名前のファイルをコピーします。txt”を”file2″という名前のファイルに入れます。txt”:

import shutilshutil.copyfile('file1.txt', 'file2.txt')

shutil.copyfilefollow_symlinksFalseに設定されていて、ソースファイルがシンボリックリンクである場合、ファイルをコピーする代わりに、新しいシンボリック

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

前のメソッドと同様に、copy2copycopy2は失敗を返さず、可能なメタデータだけを保持します。

構文は次のとおりです。

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シェルコマンドを含む文字列です。 私たちの場合、ここでcopycpコマンドを配置します。たとえば、次のコードは”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を呼び出す必要があります。

サブプロセスモジュールでファイルをコピーする

サブプロセスモジュールは、osos.systemos.spawn*callcheck_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.runargsパラメータには、使用するシェルコマンドが含まれています。 もう一度、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のメソッドセットの一部です。 他の人は、copycpようなシェルコマンドを利用するシェルでコマンドを実行するためにPythonの強力な

どれがあなたに合っているかわかりませんか?

ここでは、ファイルをコピーするさまざまな方法を紹介したので、それは理解できます。 ファイルをコピーするために使用する方法は完全にあなた次第であり、あなたの特定のニーズに依存します。 ほとんどの場合、shutilshutil.copy2それが必要なことをするかどうかを確認してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です