Python標準庫shutil用法例項詳解

2021-10-06 19:40:35 字數 4581 閱讀 1154

shutil模組提供了許多關於檔案和檔案集合的高階操作,特別提供了支援檔案複製和刪除的功能。

資料夾與檔案操作

copyfileobj(fsrc, fdst, length=16*1024): 將fsrc檔案內容複製至fdst檔案,length為fsrc每次讀取的長度,用做緩衝區大小

import shutil

f1 = open("file.txt","r")

f2 = open("file_copy.txt","a+")

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

copyfile(src, dst): 將src檔案內容複製至dst檔案

import shutil

shutil.copyfile("file.txt","file_copy.txt")

copymode(src, dst): 將src檔案許可權複製至dst檔案。檔案內容,所有者和組不受影響

import shutil

shutil.copymode("file.txt","file_copy.txt")

copystat(src, dst): 將許可權,上次訪問時間,上次修改時間以及src的標誌複製到dst。檔案內容,所有者和組不受影響

import shutil

shutil.copystat("file.txt","file_copy.txt")

copy(src, dst): 將檔案src複製至dst。dst可以是個目錄,會在該目錄下建立與src同名的檔案,若該目錄下存在同名檔案,將會報錯提示已經存在同名檔案。許可權會被一併複製。本質是先後呼叫了copyfile與copymode而已

improt shutil,os

shutil.copy("file.txt","file_copy.txt")

# 或者

shutil.copy("file.txt",os.path.join(os.getcwd(),"copy"))

copy2(src, dst): 將檔案src複製至dst。dst可以是個目錄,會在該目錄下建立與src同名的檔案,若該目錄下存在同名檔案,將會報錯提示已經存在同名檔案。許可權、上次訪問時間、上次修改時間和src的標誌會一併複製至dst。本質是先後呼叫了copyfile與copystat方法而已

improt shutil,os

shutil.copy2("file.txt","file_copy.txt")

# 或者

shutil.copy2("file.txt",os.path.join(os.getcwd(),"copy"))

ignore_patterns(*patterns): 忽略模式,用於配合copytree()方法,傳遞檔案將會被忽略,不會被拷貝

copytree(src, dst, symlinks=false, ignore=none): 拷貝文件樹,將src資料夾裡的所有內容拷貝至dst資料夾

import shutil,os

folder1 = os.path.join(os.getcwd(),"aaa")

# bbb與ccc資料夾都可以不存在,會自動建立

folder2 = os.path.join(os.getcwd(),"bbb","ccc")

# 將"abc.txt","bcd.txt"忽略,不複製

shutil.copytree(folder1,folder2,ignore=shutil.ignore_patterns("abc.txt","bcd.txt")

rmtree(path, ignore_errors=false, οnerrοr=none): 移除文件樹,將資料夾目錄刪除

import shutil,os

folder1 = os.path.join(os.getcwd(),"aaa")

shutil.rmtree(folder1)

move(src, dst): 將src移動至dst目錄下。若dst目錄不存在,則效果等同於src改名為dst。若dst目錄存在,將會把src資料夾的所有內容移動至該目錄下面

import shutil,os

# 示例一,將src資料夾移動至dst資料夾下面,如果bbb資料夾不存在,則變成了重新命名操作

folder1 = os.path.join(os.getcwd(),"aaa")

folder2 = os.path.join(os.getcwd(),"bbb")

shutil.move(folder1, folder2)

# 示例二,將src檔案移動至dst資料夾下面,如果bbb資料夾不存在,則變成了重新命名操作

file1 = os.path.join(os.getcwd(),"aaa.txt")

folder2 = os.path.join(os.getcwd(),"bbb")

shutil.move(file1, folder2)

# 示例三,將src檔案重新命名為dst檔案(dst檔案存在,將會覆蓋)

file1 = os.path.join(os.getcwd(),"aaa.txt")

file2 = os.path.join(os.getcwd(),"bbb.txt")

shutil.move(file1, file2)

disk_usage(path): 獲取當前目錄所在硬碟使用情況。python3新增方法

import shutil.os

path = os.path.join(os.getcwd(),"aaa")

info = shutil.disk_usage(path)

print(info) # usage(total=95089164288, used=7953104896, free=87136059392)

chown(path, user=none, group=none): 修改路徑指向的檔案或資料夾的所有者或分組。python3新增方法

import shutil,os

path = os.path.join(os.getcwd(),"file.txt")

shutil.chown(path,user="root",group="root")

which(cmd, mode=os.f_ok | os.x_ok, path=none): 獲取給定的cmd命令的可執行檔案的路徑。python3新增方法

import shutil

info = shutil.which("python3")

print(info) # /usr/bin/python3

歸檔操作

shutil還提供了建立和讀取壓縮和存檔檔案的高階使用程式。內部實現主要依靠的是zipfile和tarfile模組

make_archive(base_name, format, root_dir, …): 生成壓縮檔案

import shutil,os

base_name = os.path.join(os.getcwd(),"aaa")

format = "zip"

root_dir = os.path.join(os.getcwd(),"aaa")

# 將會root_dir資料夾下的內容進行壓縮,生成乙個aaa.zip檔案

shutil.make_archive(base_name, format, root_dir)

get_archive_formats(): 獲取支援的壓縮檔案格式。目前支援的有:tar、zip、gztar、bztar。在python3還多支援一種格式xztar

unpack_archive(filename, extract_dir=none, format=none): 解壓操作。python3新增方法

import shutil,os

zip_path = os.path.join(os.getcwd(),"aaa.zip")

extract_dir = os.path.join(os.getcwd(),"aaa")

shutil.unpack_archive(zip_path, extract_dir)

get_unpack_formats(): 獲取支援的解壓檔案格式。目前支援的有:tar、zip、gztar、bztar和xztar。python3新增方法

Python 標準庫之 shutil

shutil是shell utilities的簡寫,它提供了大量的檔案和目錄的高階操作。特別針對檔案 目錄的拷貝和刪除,主要功能為目錄和檔案操作以及壓縮操作。函式說明 shutil.copyfile src,dst 從源src複製到dst中去。如果當前的dst已存在的話就會被覆蓋掉,src 和 ds...

python 標準庫之shutil

pip install shutil1,複製檔案 1.shutil.copy src,dst 拷貝檔案和許可權 返回值是複製之後的路徑例子 import shutil shutil.copy f1.log f2.log 2,shutil.copy2 src,dst 拷貝檔案和狀態資訊 import ...

Python標準庫 shutil模組

import shutil shutil.copyfileobj fsrc,fdst length 將檔案類物件 fsrc 的內容拷貝到檔案類物件 fdst。整數值 length 如果給出則為緩衝區大小。特別地,length為負值表示拷貝資料時不對源資料進行分塊迴圈處理 預設情況下會分塊讀取資料以避...