ファイル操作

pythonにおけるファイル操作は、基本 shutil を使えば良いが、細かな挙動は把握しておく必要がある。

copyとcopy2

どちらもファイルをコピーするコマンドだが、

  • copyはメタデータをコピーしない。つまり、コピー先ファイルの更新日時等はコピー時のものになる
  • copy2はそれらを元ファイルと同じにする

コピー先が既に存在

shutil.copy, copy2
  • srcはファイル限定
  • dstが存在するファイルの場合、上書き
  • dstが存在するディレクトリの場合、その中に入れられる
shutil.move
  • srcはファイル/ディレクトリ両方可
  • srcがファイルの場合
    • dstが存在するファイルの場合、上書き
    • dstが存在するディレクトリの場合、その中に入れられる
  • srcがディレクトリの場合
    • dstが存在するファイルの場合、エラー
    • dstが存在するディレクトリの場合、その中に入れられる

src, dstがディレクトリ同士でも、dstの中にsrcが入れられる点に注意。

distutils.dir_util.copy_tree
  • srcはディレクトリ限定
  • dstが存在するファイルの場合、エラー
  • dstが存在するディレクトリの場合、統合(その中で競合する場合は上書き)
aaa\                                    aaa\
  |-bbb.txt                               |-bbb.txt
  `-ccc.txt(1)  copy_tree('ddd', 'aaa')   |-ccc.txt(2)
ddd\            ---------------------->   `-eee.txt
  |-ccc.txt(2)                          ddd\
  `-eee.txt                               |-ccc.txt(2)
                                          `-eee.txt

「ディレクトリを移動したいが、dstが存在したら統合したい」場合は、ひとまずcopy_tree後、srcを消せばいい。が、同一ドライブの場合、移動とコピーでは速度に差が出るため、もっと良い方法が無いだろうか。

programming/python/tips/file_operation.txt · 最終更新: 2017/10/24 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0