一.shutil模塊介紹
shutil模塊提供了一系列對(duì)文件和文件集合的高階操作伴郁。 特別是提供了一些支持文件拷貝和刪除的函數(shù)。 對(duì)于單個(gè)文件的操作可以參考o(jì)s模塊。
1.1 目錄和文件操作
操作命令 | 操作命令解釋 |
---|---|
shutil.copyfileobj(fsrc, fdst[, length]) | 將文件類對(duì)象 fsrc 的內(nèi)容拷貝到文件類對(duì)象 fdst。 整數(shù)值 length 如果給出則為緩沖區(qū)大小阳掐。 特別地, length 為負(fù)值表示拷貝數(shù)據(jù)時(shí)不對(duì)源數(shù)據(jù)進(jìn)行分塊循環(huán)處理冷蚂;默認(rèn)情況下會(huì)分塊讀取數(shù)據(jù)以避免不受控制的內(nèi)存消耗缭保。 請(qǐng)注意如果 fsrc 對(duì)象的當(dāng)前文件位置不為 0,則只有從當(dāng)前文件位置到文件末尾的內(nèi)容會(huì)被拷貝帝雇。 |
shutil.copyfile(src, dst, *, follow_symlinks=True) | 將 src 文件的內(nèi)容(不含元數(shù)據(jù))拷貝到 dst 文件并返回 dst涮俄。 src 和 dst 是字符串形式的路徑。 dst 必須是完整的目標(biāo)文件名尸闸;對(duì)于接受一個(gè)目標(biāo)目錄路徑的拷貝請(qǐng)參見 shutil.copy() 彻亲。 如果 src 和 dst 指定了同一文件,則將引發(fā) SameFileError 吮廉。 |
exception shutil.SameFileError | 此異常會(huì)在 copyfile() 中的源和目標(biāo)為同一文件時(shí)被引發(fā)苞尝。 |
shutil.copymode(src, dst, *, follow_symlinks=True) | 從 src 拷貝權(quán)限位到 dst。 文件的內(nèi)容宦芦、所有者和分組將不受影響宙址。 src 和 dst 均為字符串形式的路徑名。 如果 follow_symlinks 為假值调卑,并且 src 和 dst 均為符號(hào)鏈接抡砂,copymode() 將嘗試修改 dst 本身的模式(而非它所指向的文件)。 此功能并不是在所有平臺(tái)上均可用恬涧;請(qǐng)參閱 copystat() 了解詳情注益。 如果 copymode() 無法修改本機(jī)平臺(tái)上的符號(hào)鏈接,而它被要求這樣做溯捆,它將不做任何操作即返回丑搔。 |
shutil.copystat(src, dst, *, follow_symlinks=True) | 從 src 拷貝權(quán)限位、最近訪問時(shí)間提揍、最近修改時(shí)間以及旗標(biāo)到 dst啤月。 在 Linux 上,copystat() 還會(huì)在可能的情況下拷貝“擴(kuò)展屬性”劳跃。 文件內(nèi)容谎仲、所有者和分組將不受影響。 src 和 dst 均為字符串形式的路徑名刨仑。 |
shutil.copy(src, dst, *, follow_symlinks=True) | 將文件 src 拷貝到文件或目錄 dst郑诺。 src 和 dst 應(yīng)為字符串绞呈。 如果 dst 指定了一個(gè)目錄,文件將使用 src 中的基準(zhǔn)文件名拷貝到 dst间景。 返回新創(chuàng)建文件所對(duì)應(yīng)的路徑。 |
shutil.copy2(src, dst, *, follow_symlinks=True) | 類似于 copy() 艺智,區(qū)別在于 copy2() 還會(huì)嘗試保留文件的元數(shù)據(jù) |
shutil.ignore_patterns(*patterns) | 這個(gè)工廠函數(shù)會(huì)創(chuàng)建一個(gè)函數(shù)倘要,它可被用作 copytree() 的 ignore 可調(diào)用對(duì)象參數(shù),以忽略那些匹配所提供的 glob 風(fēng)格的 patterns 之一的文件和目錄十拣。 參見以下示例封拧。 |
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False) | 遞歸地拷貝以 src 為根路徑的整個(gè)目錄樹,返回目標(biāo)目錄夭问。 名為 dst 的目標(biāo)目錄不必已存在泽西;它本身和還不存在的父目錄都將被自動(dòng)創(chuàng)建。 目錄的權(quán)限和時(shí)間信息將通過 copystat() 來拷貝缰趋,單獨(dú)的文件將使用 shutil.copy2() 來拷貝捧杉。 |
shutil.rmtree(path, ignore_errors=False, onerror=None) | 刪除一個(gè)完整的目錄樹;path 必須指向一個(gè)目錄(但不能是一個(gè)目錄的符號(hào)鏈接)秘血。 如果 ignore_errors 為真值味抖,刪除失敗導(dǎo)致的錯(cuò)誤將被忽略;如果為假值或是省略灰粮,此類錯(cuò)誤將通過調(diào)用由 onerror 所指定的處理程序來處理仔涩,或者如果此參數(shù)被省略則將引發(fā)一個(gè)異常。 |
shutil.move(src, dst, copy_function=copy2) | 遞歸地將一個(gè)文件或目錄 (src) 移至另一位置 (dst) 并返回目標(biāo)位置粘舟。 |
shutil.disk_usage(path) | 返回給定路徑的磁盤使用統(tǒng)計(jì)數(shù)據(jù)熔脂,形式為一個(gè) named tuple,其中包含 total, used 和 free 屬性柑肴,分別表示總計(jì)霞揉、已使用和未使用空間的字節(jié)數(shù)。 在 Windows 上嘉抒,path 必須是一個(gè)目錄零聚;在 Unix 上,它可以是一個(gè)文件或一個(gè)目錄些侍。 |
shutil.chown(path, user=None, group=None) | 修改給定 path 的所有者 user 和/或 group |
shutil.which(cmd, mode=os.F_OK or os.X_OK, path=None) | 返回當(dāng)給定的 cmd 被調(diào)用時(shí)將要運(yùn)行的可執(zhí)行文件的路徑隶症。 如果沒有 cmd 會(huì)被調(diào)用則返回 None |
exception shutil.Error | 此異常會(huì)收集在多文件操作期間所引發(fā)的異常。 對(duì)于 copytree() 岗宣,此異常參數(shù)將是一個(gè)由三元組 (srcname, dstname, exception) 構(gòu)成的列表蚂会。 |
1.2 歸檔操作
操作命令 | 操作命令解釋 |
---|---|
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]) | 創(chuàng)建一個(gè)歸檔文件(例如 zip 或 tar)并返回其名稱 |
shutil.get_archive_formats() | 返回支持的歸檔格式列表。 所返回序列中的每個(gè)元素為一個(gè)元組 (name, description) |
shutil.register_archive_format(name, function[, extra_args[, description]]) | 為 name 格式注冊(cè)一個(gè)歸檔程序 |
shutil.unregister_archive_format(name) | 從支持的格式中移除歸檔格式 name |
shutil.unpack_archive(filename[, extract_dir[, format]]) | 解包一個(gè)歸檔文件耗式。 filename 是歸檔文件的完整路徑胁住。 |
shutil.register_unpack_format(name, extensions, function[, extra_args[, description]]) | 注冊(cè)一個(gè)解包格式趁猴。 name 為格式名稱而 extensions 為對(duì)應(yīng)于該格式的擴(kuò)展名列表,例如 Zip 文件的擴(kuò)展名為 .zip彪见。 |
shutil.unregister_unpack_format(name) | 撤銷注冊(cè)一個(gè)解包格式儡司。 name 為格式的名稱。 |
shutil.get_unpack_formats() | 返回所有已注冊(cè)的解包格式列表余指。 所返回序列中的每個(gè)元素為一個(gè)元組 (name, extensions, description)捕犬。 |
二.shutil模塊實(shí)例
2.1 shutil.copyfileobj
shutil.copyfileobj(文件1,文件2):將文件1的數(shù)據(jù)覆蓋copy給文件2酵镜。
代碼:
import shutil
f1 = open("1.txt",encoding="utf-8")
f2 = open("2.txt","w",encoding="utf-8")
shutil.copyfileobj(f1,f2)
2.2 shutil.copyfile
shutil.copyfile(文件1碉碉,文件2):不用打開文件,直接用文件名進(jìn)行覆蓋copy淮韭。
代碼:
import shutil
shutil.copyfile("1.txt","3.txt")
2.3 shutil.copymode
shutil.copymode(文件1垢粮,文件2):只拷貝權(quán)限,內(nèi)容組靠粪,用戶蜡吧,均不變。
def copymode(src,dst):
"""copy mode bits from src to dst"""
if hasattr(os,'chmod'):
st = os.stat(stc)
mode = stat.S_IMODE(st.st_mode)
os.chmod(dst,mode)
2.4 shutil.copystat
shutil.copystat(文件1占键,文件):只拷貝了權(quán)限斩跌。
2.5 shutil.copy
shutil.copy(文件1,文件2):拷貝文件和權(quán)限都進(jìn)行copy捞慌。
2.6 shutil.copy2
shutil.copy2(文件1耀鸦,文件2):拷貝了文件和狀態(tài)信息。
2.7 shutil.copytree
shutil.copytree(源目錄啸澡,目標(biāo)目錄):可以遞歸copy多個(gè)目錄到指定目錄下袖订。
2.8 shutil.rmtree
shutil.rmtree(目標(biāo)目錄):可以遞歸刪除目錄下的目錄及文件。
2.9 shutil.move
shutil.move(源文件嗅虏,指定路徑):遞歸移動(dòng)一個(gè)文件洛姑。
2.10 shutil.make_archive()
shutil.make_archive():可以壓縮,打包文件皮服。
代碼:
import shutil
shutil.make_archive("shutil_archive_test","zip","E:\python\learn_python1\shutil")
測(cè)試結(jié)果:
2.11 shutil.disk_usage(path)
shutil.disk_usage(path) 返回給定路徑的磁盤使用統(tǒng)計(jì)數(shù)據(jù)楞艾,形式為一個(gè) named tuple,其中包含 total, used 和 free 屬性龄广,分別表示總計(jì)硫眯、已使用和未使用空間的字節(jié)數(shù)。 在 Windows 上择同,path 必須是一個(gè)目錄两入;在 Unix 上,它可以是一個(gè)文件或一個(gè)目錄敲才。
代碼:
import shutil
BytesPerGB = 1024 * 1024 * 1024
(total, used, free) = shutil.disk_usage("E:\python\learn_python1\shutil")
print ("Total: %.2fGB" % (float(total)/BytesPerGB))
print ("Used: %.2fGB" % (float(used)/BytesPerGB))
測(cè)試記錄:
E:\python\learn_python1\venv\Scripts\python.exe E:/python/learn_python1/shutil/shutil_test3.py
Total: 465.76GB
Used: 409.95GB
Total: 465.76GB
Used: 409.95GB
Process finished with exit code 0