\r\n\r\n
Pythonのスキルを向上させたい方。そして、Pythonを使って、コンピュータで様々な作業をしてみてください。Pythonを使って、あるディレクトリから別のディレクトリにファイルをコピー&ペーストするのは、面白い方法です。
楽しいだけでなく、コードから気をそらすことなく、素早く文書を読んだり書いたりすることができます。もしあなたがPythonを初めて使うのであれば、やはり何らかの学習方法を採用する必要があるかもしれません。それでは、この記事を通して、Pythonを使ったファイルのコピー方法を学んでいきましょう。
Pythonを使ってファイルをコピー&ペーストする方法はたくさんあるので、実行する必要性は様々で、あなたが決めた方法によって異なります。
Pythonを使ったファイルコピーには追加モジュールが必要ない場合もありますが、必要に応じて組み込みのライブラリを使用することも可能です。
例えば、osメソッドを使用したい場合、コードにインポートする必要があります。しかし、Pythonでファイルをコピーする一般的な方法は、shutilライブラリを使用することです。
これらの異なる方法を用いて、Pythonでどのようにファイルをコピーするか見てみましょう。
shutilモジュールは、Pythonでファイルの読み書きを高速に行うための組み込み型の強力なPythonライブラリです。
使用するには、ソースファイルとターゲットファイルのフルパスを指定するだけです。
基本的にshutilは以下のような書式で使用します。
shutil.copy([source directory path], [destination directory path], follow_symlinks=True)
例えば、次のコードは shutil.copy() を使って、copy.txt というファイルを "My \ Folder" というフォルダーから "Destination" という別のフォルダーにコピーしています。そして、保存先のファイルは新しいファイル.txtにリネームされます。
import shutil
sourceFile = "C:/Users/some_directories/my_folder/copy.txt"
destinationFile = "C:/Users/some_directories/destination/newFile.txt"
shutil.copy(sourceFile, destinationFile, follow_symlinks=True)
なお、コードはお好きなコードエディターで書いて、コマンドラインを使って実行することができます。
しかし、コマンドラインによるPythonの実行に慣れていない場合は、デフォルトのPython統合開発環境(IDLE)を使用することもできます。
関連:知っておきたいコマンドプロンプト(CMD)のコマンドたち
この shutil.copy メソッドは、ソースファイルのメタデータをコピーしません。基本的に、あなたのマシンはターゲットファイルを全く新しいファイルとして扱い、新しいメタデータを提供します。
ただし、メタデータをオリジナルファイルと一緒にコピーするには、shutil.copy2 fileメソッドを使用します。
import shutil
shutil.copy2(sourceFile, destinationFile, follow_symlinks=True)
上記の方法では、旧ファイルのオリジナルのメタデータがターゲットファイルに保存され、例えば、ターゲットファイルにはソースファイルの作成日、サイズなどの属性が保持されます。
followu symlinksパラメータは、shutilが絶対パスをたどることを可能にするシンボリックリンク宣言です。したがって、ソースファイルとターゲットファイルが異なるディレクトリにある場合、それを含める必要があります。
ただし、両方のファイルがカレントワーキングディレクトリにある場合は、followu シンボリックリンクを含める必要はない。そうすると、Pythonは構文例外を発生させます。
したがって、ソースファイルをカレントワーキングディレクトリに貼り付けるには、次のようなコードになります。
import shutil
shutil.copy2(sourceFile, destinationFile)
上記のshtuilメソッドを使用する以外に、shutil.copyfileまたはshutil.copyfileobjファイルを使用することができます。
shutil.copyfileobjファイルの使用は、組み込みのopen関数が必要なため、少し異なります。その後、"rb "と "wb "パラメータを含めて、バイナリファイルの読み込みと書き込みを行う必要があります。
先ほどと同じディレクトリで動作するshutil.copyfileobjファイルメソッドを見てみましょう。
import shutil
sourceFilePath = open("C:/Users/some_directories/my_folder/copy.txt", "rb")
保存先FilePath = open("C:/Users/some_directories/destination/newFile.txt", "wb")
shutil.copyfileobj(ソースFilePath, デスティネーションFilePath)
shutil.copyfileobj ファイル () には、followu symlinks パラメータが必要ないことに注意してください。
しかし、shutil.copyfileファイル()は、.copyや.copy2とほぼ同じように動作します。内部の機能にほとんど差はありません。
shutil.copyfile file () メソッドを使用します。
import shutil
sourceFilePath = "C:/Users/some_directories/my_folder/copy.txt"
destinationFilePath = "C:/Users/some_directories/destination/newFile.txt" です。
shutil.copyfile(ソースFilePath, デスティネーションFilePath)
OSモジュールは、OS()メソッドとOsborne()メソッドの2つの組み込みメソッドを使用してファイルをコピーします。
このオペレーティングシステム()方式では、コマンドライン環境をシミュレートすることができます。
しかし、os方式の欠点は、現在の作業ディレクトリ内のファイルしかコピーできないことである。
オペレーティングシステムを使用する() Windowsでの方法。
import os
os.system('copy source.txt destination.txt)
Windowsに内蔵されているxcopyというターミナルコマンドを使うこともできます。
import os
os.system('xcopy source.txt destination.txt)
OSの方式で、copyをcpに置き換えてください。
import os
os.system('cp source.txt destination.txt)
この方法を使用するには、オペレーティングシステム()をオズボーン()に置き換えてください。
Windowsの場合、使用します。
import os
os.popen('コピー元.txtコピー先.txt)
OS()の場合と同様に、Linuxでこの方法を使用する場合は、copyをcpに置き換えてください。
import os
os.popen('cp source.txt destination.txt)
上記の方法に加えて、Pythonのファイルは、以下のsubprocess()ライブラリを使用してコピーすることができます。
import subprocess as sp
sp.call("コピー sourceFile destinationFile", shell=True)
ただし、Linuxでは、使用してください。
import subprocess as sp
sp.call("cp sourceFile destinationFile", shell=True)
また、サブプロセスライブラリでは、サブプロセス呼び出し()実行と同じように動作するサブプロセス・チェック()メソッドを使用しています。
import subprocess as sp
sp.check_out("copy sourceFile destinationFile", shell=True)
Linuxでは、copyをcpに置き換えてください。
import subprocess as sp
sp.check_out("cp sourceFile destinationFIle", shell=True)
ただし、osメソッドと同様に、subprocessメソッドでは、現在の作業ディレクトリにあるファイルしか処理できない。
注:ソースファイルと同じ作業ディレクトリにファイルがある場合は、フォルダにコピーすることも可能です。対象ファイル名を対象フォルダー名に置き換えるだけです。ただし、保存先のフォルダと保存元ファイルが、現在の作業ディレクトリにあることを確認してください。
また、Pythonでは、ライブラリに依存しないファイルコピーも可能です。shutilメソッドと同様に、ソースとデスティネーションディレクトリのフルパスだけが必要です。
その方法を紹介します。
sourcePath = "C:/Users/source_directories/my_folder/copy.txt"
destinationPath = "C:/Users/some_directories/destination_directories/newFile.txt" です。
open(sourcePath, "rb")をreadとした場合。
with open(destinationPath, "wb") as myfile:
myfile.write(read.read())
再利用できるように、コードを関数として変更することができます。
def copyFile(source=None, destination=None):
if not (source and destination)==None:
をopen(source, "rb")で読み込みました。
with open(destination, "wb") as myfile:
myfile.write(read.read())
を追加しました。
print("送信元と送信先のパスを入力してください")
copyFile(sourcePath, destinationPath)
これで、Python**で、ライブラリを使わずに再利用可能なファイルコピー機を作りました。
プロジェクトを構築する際にコードに集中するのに役立つだけでなく、Pythonを使ってファイルをコピーすることで、Pythonのファイル管理についてより深く理解できるようになります。しかし、Pythonのタスクを使うことは、特に初心者の場合、Pythonのスキルを向上させる一つの方法です。
例えば、オペレーティングシステムモジュールを使って、PCの日付と時刻を変更することができます。必要であれば、Pythonでカスタムbashコマンドを書くこともできます。