Python shutil模塊 | 8月更文挑戰

玩轉Python

這是我參與8月更文挑戰的第3天,活動詳情查看:8月更文挑戰python

✰ 回顧複習

咱們在前面已經學習了對文件操做的os模塊,對文件路徑操做的os.path模塊shell

Python文件操做模塊

本期,咱們繼續學習關於文件的Python模塊—shutil。安全

(#^.^#),學習shutil模塊能夠對文件及文件夾壓解縮、移動、拷貝等高級的操做markdown

✧1.shutil模塊概述

shutil模塊顧明思議sh + util,shell工具的意思,shutil模塊有以下特色app

  • python標準庫中提供的,主要用來作文件和文件夾的拷貝、移動、刪除等
  • 支持文件和文件夾的壓縮、解壓縮操做
  • shutil模塊對os模塊提供的對目錄或文件的通常操做進行了補充,提供移動、複製、壓縮、解壓等操做,屬於高級的文件操做模塊

💻注意ide

shutil模塊提供的拷貝文件也是不能拷貝文件的元數據。 (元數據:文件的大小與修改日期等信息。)工具

  • 在Linux系統上,拷貝源文件以後將丟失全部者和組以及安全數據
  • 在MAC OS系統上,文件操做記錄和其餘元數據都不能使用,拷貝的文件建立者等信息會被丟失,致使顯示信息不許確
  • 在window系統上,拷貝的文件不拷貝文件全部者、ACL和替代數據流

✧2. 目錄文件操做

shutil模塊提供了os模塊對文件沒有的拷貝、移動。經常使用的方法以下:post

方法 做用
shutil.copyfileobj(fsrc,fdst[length=16*1024]) 將文件內容拷貝到另外一個文件中,能夠指定大小的內容
shutil.copyfile(src,dst) 拷貝文件
shutil.copymode(src,dst) 僅拷貝權限。內容、組、用戶均不變
shutil.copystat(src,dst) 僅拷貝狀態的信息,
包括:mode bits, atime, mtime, flags
shutil.copy(src,dst) 拷貝文件和權限
shutil.copy2(src,dst) 拷貝文件和狀態信息
shutil.ignore_patterns(*patterns) 遞歸的複製文件內容及狀態信息,ignore的意思是排除
shutil.copytree(src,dst,symlinks=False,ignore=None,ignore=None) 拷貝軟鏈接
shutil.rmtree(path[,ignore_errors[,onerror]]) 遞歸刪除文件
shutil.move(src,dst) 遞歸的去移動文件,它相似mv命令,其實就是重命名。

🌟shutil.copyfile(src,dst)學習

拷貝文件📃;能夠指定文件的大小。ui

注意:是src和dst必須是文件,不能夠是目錄 不然會報IOError: [Errno 13] Permission denied:

咱們來實現一下,從A文件夾下的文件批量複製到B文件夾下

import shutil
import os

def copyfile():

    filefolds = os.listdir('./old')
    print("old文件夾裏文件:",filefolds)
    i = 0
    for file in filefolds:
        i = i+1
        new_name = "New/"+"New"+str(i)+"_test"+'.txt'
        print(new_name)
        filename = "old/"+file+"/test.txt"
        shutil.copyfile(filename, new_name)
copyfile()
複製代碼

批量複製文件運行結果

🌟 shutil.copytree(src,dst,symlinks=False,ignore=None,ignore=None)

遞歸複製目錄及子目錄的文件和狀態信息 注意:

  • src: 源目錄(須要拷貝的內容地址)
  • dst:若是存在的話,是不可覆蓋的;,不然會報WindowsError: [Error 183]
  • symlinks:指定是否複製軟連接。當心陷入死循環
  • ignore:指定不參與複製的文件,其值應該是一個ignore_patterns()方法
  • cpoy_founction:指定複製的模式
import os
import shutil

# 切換到F:\JueJin目錄下
os.chdir(r"F:\JueJin")

shutil.copytree("./old/old0_test","./New3")

print("dst目錄下的文件:",os.listdir("./New3"))
複製代碼

copytree運行結果

✧3. 解壓縮操做

shutil模塊也提供了對文件📃和文件夾📁打包、壓縮、解壓縮操做,常見方法以下:

方法 做用
shutil.make_archive(base_name,format[,root_dir[,base_dir[]]]) 建立一個歸檔文件(例如 zip 或 tar)並返回其名稱
shutil.get_archive_formats() 返回支持的歸檔格式列表
shutil.register_archive_format(name,funvtion[,extra_args[,description]]) 爲name格式註冊一個歸檔程序

ps: shutil模塊支持壓縮、解壓操做底層是依賴zipfile模塊和tarfile模塊

🌟shutil.make_archive(base_name,format[,root_dir[,base_dir[...]]])

base_name:壓縮打包後的文件名或者路徑名 format:壓縮或者打包格式「zip」,"tar","bztar"or"gztar" root_dir: 將哪一個目錄或者文件打包(也就是源文件)

makearchivefile("./old","./old/old0_test")
複製代碼

生成壓縮包

✍總結

本期,咱們學習shutil模塊對os模塊對文件操做進行補充,重點有兩點

  • 對文件支持拷貝、移動、刪除操做
  • 能對文件及文件夾進行壓縮和解壓縮

咱們在須要是要對文件進行拷貝移動及壓縮解壓縮等操做,能夠藉助Python裏面的shutil模塊來爲咱們服務,提升咱們解決問題的速度~

以上是本期內容,歡迎大佬們點贊評論指正,下次見~ღ( ´・ᴗ・` )比心

相關文章
相關標籤/搜索