簡介
shutil模塊提供了大量的文件的高級操作。特別針對文件拷貝和刪除,主要功能為目錄和文件操作以及壓縮操作。對單個文件的操作也可參見os模塊。
拷貝文件
shutil.copyfile(src, dst):復制文件內容(不包含元數據)從src到dst。 DST必須是完整的目標文件名;拷貝目錄參見shutil.copy()。如果src和dst是同一文件,就會引發錯誤shutil.Error。dst必須是可寫的,否則將引發異常IOError。如果dst已經存在,它會被替換。特殊文件,例如字符或塊設備和管道不能使用此功能,因為copyfile會打開並閱讀文件。 src和dst的是字符串形式的路徑名。
shutil.copyfile("shutil_copyfile.py","shutil_copyfile.py.copy")
copyfile()調用了底函數層copyfileobj()。
shutil.copyfileobj(fsrc, fdst[, length]):復制文件內容(不包含元數據)從類文件對象src到類文件對dst。可選參數length指定緩沖區的大小,負數表示一次性讀入。默認會把數據切分成小塊拷貝,以免占用太多內存。注意:拷貝是從fsrc的當前文件開始。
copyfileobj(fsrc, fdst, length=16*1024)
shutil.copy(src, dst):復制文件src到文件或目錄dst。如果dst是目錄,使用src相同的文件名創建(或覆蓋),權限位也會復制。src和dst的是字符串形式的路徑名。
1 def copy(src, dst): 2 """Copy data and mode bits ("cp src dst"). 3 4 The destination may be a directory. 5 6 """ 7 if os.path.isdir(dst): 8 dst = os.path.join(dst, os.path.basename(src)) 9 copyfile(src, dst) 10 copymode(src, dst)
shutil.copy2(src, dst): 類似shutil.copy,元數據也復制,實際上先調用shutil.copy,然后使用copystat。這類似於Unix命令cp -p。
def copy2(src, dst): """Copy data and all stat info ("cp -p src dst"). The destination may be a directory. """ if os.path.isdir(dst): dst = os.path.join(dst, os.path.basename(src)) copyfile(src, dst) copystat(src, dst)
拷貝文件元數據
當由UNIX下創建文件默認基於umask設置權限,copymode()可以復制權限。
shutil.copymode(src, dst):從SRC復制權限位到DST。該文件的內容,所有者和組不受影響。src和dst的是字符串形式的路徑名。
copymode('shutil_copymode.py', 'file_to_change.txt')
要想拷貝文件時間戳,需要copystat。
shutil.copystat(src, dst): 從src復制權限位,最后訪問時間,最后修改時間,flag到dst。該文件的內容,所有者和組不受影響。 src和dst的是給定的字符串路徑名。
opystat('shutil_copystat.py', 'file_to_change.txt')
壓縮解壓
2.7以后的版本提供了壓縮和解壓功能。
格式:shutil.make_archive(base_name, format[, root_dir[, base_dir, verbose, dry_run, owner, group, logger])
base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑,
format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要壓縮的文件夾路徑(默認當前目錄)
owner: 用戶,默認當前用戶
group: 組,默認當前組
logger: 用於記錄日志,通常是logging.Logger對象
ret = shutil.make_archive("backup","tar",root_dir="/home/www/") #將/home/www目錄下的文件進行備份,生成backup.tar的文件,其中tar為壓縮包的后綴,www為壓縮包文件名
指定目錄備份:
>>> shutil.make_archive("/tmp/backup","tar",root_dir="/usr/local/python35")
'/tmp/backup.tar'
參考文檔:http://blog.csdn.net/bytxl/article/details/27189045
