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

  • URLをコピーしました!
目次

はじめに

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によっては、メタデータのコピー内容に差がありますので、確認が必要です。

[A8_TechAcademy065]

[Footer]

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次