136:ファイルをコピーする
ファイルをコピーするには、shutilモジュールのcopy を使います。アクセス許可ビットもコピーしますが、最終アクセス時刻と最終更新時刻はコピーしません。copy2はcopyと同じですが、最終アクセス時刻と最終更新時刻もコピーするのでバックアップのときなどにはいいでしょう。
ファイルdstは作成されるか、既に存在すれば上書きされますが、途中のディレクトリは予め用意しておく必要があります。
>>> import shutil >>> src='C:/Documents and Settings/Administrator/My Documents/inputspace.txt' >>> dst='C:/temp/inputspace.txt' >>> shutil.copy(src,dst)
曜日の名前のフォルダを作って、バックアップを取るpythonプログラム。一週間で回転させていく。
import time
import shutil
import glob
import os
srcdir='/home/seko/temp/src/'
file='backupdata.txt'
srcfile=srcdir+file
destdir='/home/seko/temp/dest/'
DayofWeek=time.strftime('%A')
destfile=destdir+'/'+DayofWeek+'/'+srcfile.split('/')[-1]
try:
os.remove(destfile)
except OSError:
print 'no such file'
try:
os.rmdir(destdir+DayofWeek)
except OSError:
print 'no such dir'
os.makedirs(destdir+DayofWeek,mode=0777)
shutil.copy2(srcfile,destfile)
shutil.copytree を使えば2二行でc:/backupからd:/backupにディレクトリを再帰的にコピーできます。
Windowsで暗号化したファイルを手動でNTFSフォーマットされた外付けUSBディスクにコピーすると、暗号が解除されないままコピーされます。 PCが壊れていざバックアップを使おうと思った時に、暗号化されていて読めなかった情けない経験があります。
下のプログラムを使えば、NTFSにコピーしても暗号化は解除されるし、日付もそのままです。 これはすばらしいですね。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import shutil
shutil.copytree('c:/backup','d:/backup')
以下は前述のcopytree()関数のドキュメント文字列を省略した実装例 です。本モジュールで提供される他の関数の使い方を示しています。
def copytree(src, dst, symlinks=0):
names = os.listdir(src)
os.mkdir(dst)
for name in names:
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
try:
if symlinks and os.path.islink(srcname):
linkto = os.readlink(srcname)
os.symlink(linkto, dstname)
elif os.path.isdir(srcname):
copytree(srcname, dstname, symlinks)
else:
copy2(srcname, dstname)
except (IOError, os.error), why:
print "Can't copy %s to %s: %s" % (`srcname`, `dstname`, str(why))