【Python】ファイル操作:ファイルをコピーする(copyfile, copy, copy2)

はじめに

shutilモジュールのcopyfilecopycopy2を使用し、ファイル一覧を取得します。

copyfile関数を使ったファイルコピー

shutil.copyfile(src, dst, *, follow_symlinks=True)

dstは書き込み可能でなければなりません。そうでない場合、OSError例外を送出します。dst がすでに存在する場合、そのファイルは置き換えられます。srcがシンボリックリンクの場合、リンク先をコピーします。

copy関数を使ったファイルコピー

shutil.copy(src, dst, *, follow_symlinks=True)

copy関数はデータとパーミッション(Permission)をコピーします。

copy2関数を使ったファイルコピー

shutil.copy2(src, dst, *, follow_symlinks=True)

copy2関数はデータとパーミッション(Permission)及び、メタデータをコピーします。

コード

import shutil
import glob

print(glob.glob('./*.txt'))
shutil.copyfile('aaa.txt', 'bbb.txt') # <-- copyfile関数
shutil.copy('aaa.txt', 'ccc.txt')      # <-- copy関数
shutil.copy2('aaa.txt', 'ddd.txt')    # <-- copy2関数
print(glob.glob('./*.txt'))

実行結果

['./aaa.txt']
['./aaa.txt', './bbb.txt', './ccc.txt', 'ddd.txt']
$ ls -la
-rw-rw-rw-   1 py  staff    12 12 31 23:51 aaa.txt
-rw-r--r--   1 py  staff    12 12 31 23:55 bbb.txt # <-- copyfile関数の実行結果
-rw-rw-rw-   1 py  staff    12 12 31 23:55 ccc.txt # <-- copy関数の実行結果
-rw-rw-rw-   1 py  staff    12 12 31 23:51 ddd.txt # <-- copy2関数の実行結果

copyfile, copy, copy2はそれぞれファイルをコピー(データコピー)をしますが、パーミッション(ファイルのアクセス権限)や、メタデータ(作成日時、更新日時)をコピーするかどうかの違いがあります。

  • copyfile
    • ファイルのデータコピー
  • copy
    • ファイルのデータコピー
    • パーミッションのコピー
  • copy2
    • ファイルのデータコピー
    • パーミッションのコピー
    • メタデータのコピー

おわりに

OSによっては、メタデータのコピー内容に差がありますので、確認が必要です。

この記事がお役に立ちましたら幸いです。

では、また。

※本サイトの漫画やイラストはフィクションであり、実在の製品・団体・人物・地名とは関係ありません。
※本サイトに掲載する情報には充分に注意を払っておりますが、その内容について保証するものではありません。
※本サイトの使用ならびに閲覧によって生じたいかなる損害にも責任を負いかねます。
タイトルとURLをコピーしました