1. 程式人生 > >Python_Shutil模塊_os模塊的升級版

Python_Shutil模塊_os模塊的升級版

結構 打開 目錄下的文件 root rbo path zip 對象 修改時間

一、拷貝文件

1、shutil.copyfile(src, dst):復制文件內容(不包含元數據)從src到dst。 DST必須是完整的目標文件名;拷貝目錄參見shutil.copy()。如果src和dst是同一文件,就會引發錯誤shutil.Error。dst必須是可寫的,否則將引發異常IOError。如果dst已經存在,它會被替換。特殊文件,例如字符或塊設備和管道不能使用此功能,因為copyfile會打開並閱讀文件。 src和dst的是字符串形式的路徑名。copyfile()調用了底函數層copyfileobj()。

import shutil

shutil.copyfile(r‘E:\python\1.txt‘,r‘E:\python\2.txt‘)

==>運行結果可以看到,1.txt中的內容被復制到了2.txt

2、shutil.copyfileobj(fsrc, fdst[, length]):復制文件內容(不包含元數據)從類文件對象src到類文件對dst。可選參數length指定緩沖區的大小,負數表示一次性讀入。默認會把數據切分成小塊拷貝,以免占用太多內存。註意:拷貝是從fsrc的當前文件開始。如果fdst已經存在,它會被替換。

import shutil

f1 = open(r‘E:\python\1.txt‘,‘r‘)

f2 = open(r‘E:\python\2.txt‘,‘w‘)

shutil.copyfileobj(f1,f2,length=16*1024)

f1.close()

f2.close()

==>運行結果可以看到,1.txt中的內容被復制到了2.txt

3、shutil.copy(src, dst):復制文件src到文件或目錄dst。如果dst是目錄,使用src相同的文件名創建(或覆蓋),權限位也會復制。src和dst的是字符串形式的路徑名。

import shutil

shutil.copy(r‘E:\python\1.txt‘,r‘E:\python\3.txt‘)

==>運行結果可以看到,1.txt中的內容被復制到了3.txt

4、shutil.copy2(src, dst): 類似shutil.copy,元數據也復制,實際上先調用shutil.copy,然後使用copystat。這類似於Unix命令cp -p。dst最後一級目錄下的文件不存在,則會被創建。

import shutil

shutil.copy2(r‘E:\python\1.txt‘,r‘E:\python\4.txt‘)

==>運行結果可以看到,1.txt中的內容被復制到了4.txt

5、shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False):將src路徑下的所有的目錄及文件復制到dst所指定的目錄下,註意dst中指定的目錄必須要不存在。

import shutil

shutil.copytree(r‘E:\python\project‘,r‘D:\8\7‘)

==>運行後,可以看到在D盤下產生了8\7的目錄結構,而7目錄下的所有目錄和文件則來自於E:\python\project目錄下的所有目錄和文件。

二、拷貝文件元數據

當由UNIX下創建文件默認基於umask設置權限,copymode()可以復制權限。

shutil.copymode(src, dst):從SRC復制權限位到DST。該文件的內容,所有者和組不受影響。src和dst的是字符串形式的路徑名。

copymode(‘shutil_copymode.py‘, ‘file_to_change.txt‘)

要想拷貝文件時間戳,需要copystat。

1、shutil.copystat(src, dst): 從src復制權限位,最後訪問時間,最後修改時間,flag到dst。該文件的內容,所有者和組不受影響。 src和dst的是給定的字符串路徑名。dst最後一級目錄下的文件不存在,則會報FileNotFoundError的錯誤。

import shutil

shutil.copystat(r‘E:\python\1.txt‘,r‘E:\python\5.txt‘)

==>運行後,5.txt的最後訪問時間,最後修改時間,與1.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對象。

import shutil

shutil.make_archive(r‘E:\1‘,‘zip‘,r‘E:\python\新建文件夾‘)

==>運行後,在E:\1目錄下,生成了一個叫1.zip的壓縮文件。

四、刪除非空目錄

1、shutil.rmtree(path, ignore_errors=False, onerror=None):刪除一個非空的目錄,該目錄下可以存在其他目錄和文件。

import shutil

shutil.rmtree(r‘E:\python\新建文件夾‘)

==>運行後,E:\python\新建文件夾 路徑下的最後一個目錄將會被刪除。

Python_Shutil模塊_os模塊的升級版