Python常用模塊14-python的shutil模塊

一.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涮俄。 srcdst 是字符串形式的路徑。 dst 必須是完整的目標(biāo)文件名尸闸;對(duì)于接受一個(gè)目標(biāo)目錄路徑的拷貝請(qǐng)參見 shutil.copy()彻亲。 如果 srcdst 指定了同一文件,則將引發(fā) SameFileError吮廉。
exception shutil.SameFileError 此異常會(huì)在 copyfile() 中的源和目標(biāo)為同一文件時(shí)被引發(fā)苞尝。
shutil.copymode(src, dst, *, follow_symlinks=True) src 拷貝權(quán)限位到 dst。 文件的內(nèi)容宦芦、所有者和分組將不受影響宙址。 srcdst 均為字符串形式的路徑名。 如果 follow_symlinks 為假值调卑,并且 srcdst 均為符號(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)容谎仲、所有者和分組將不受影響。 srcdst 均為字符串形式的路徑名刨仑。
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, usedfree 屬性柑肴,分別表示總計(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é)果:


image.png

2.11 shutil.disk_usage(path)

shutil.disk_usage(path) 返回給定路徑的磁盤使用統(tǒng)計(jì)數(shù)據(jù)楞艾,形式為一個(gè) named tuple,其中包含 total, usedfree 屬性龄广,分別表示總計(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

參考:

1.https://docs.python.org/zh-cn/3.6/library/shutil.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裹纳,一起剝皮案震驚了整個(gè)濱河市择葡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剃氧,老刑警劉巖敏储,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異朋鞍,居然都是意外死亡虹曙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門番舆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人矾踱,你說我怎么就攤上這事恨狈。” “怎么了呛讲?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵禾怠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我贝搁,道長(zhǎng)吗氏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任雷逆,我火速辦了婚禮弦讽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膀哲。我一直安慰自己往产,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布某宪。 她就那樣靜靜地躺著仿村,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兴喂。 梳的紋絲不亂的頭發(fā)上蔼囊,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音衣迷,去河邊找鬼畏鼓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛壶谒,可吹牛的內(nèi)容都是我干的滴肿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼佃迄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泼差!你這毒婦竟也來了贵少?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤堆缘,失蹤者是張志新(化名)和其女友劉穎滔灶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吼肥,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡录平,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缀皱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗这。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啤斗,靈堂內(nèi)的尸體忽然破棺而出表箭,到底是詐尸還是另有隱情,我是刑警寧澤钮莲,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布免钻,位于F島的核電站,受9級(jí)特大地震影響崔拥,放射性物質(zhì)發(fā)生泄漏极舔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一链瓦、第九天 我趴在偏房一處隱蔽的房頂上張望拆魏。 院中可真熱鬧,春花似錦慈俯、人聲如沸稽揭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溪掀。三九已至,卻和暖如春步鉴,著一層夾襖步出監(jiān)牢的瞬間揪胃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工氛琢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喊递,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓阳似,卻偏偏與公主長(zhǎng)得像骚勘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容