python之shutil模組

hanrd18發表於2018-09-09

轉自https://www.cnblogs.com/caibao666/p/6433864.html

python的shutil模組

shutil:高階的 檔案、資料夾、壓縮包 處理模組

shutil.copyfileobj(fsrc, fdst[, length])(copyfileobj方法只會拷貝檔案內容)
將檔案內容拷貝到另一個檔案中

import shutil

shutil.copyfileobj(open(`old.xml`,`r`), open(`new.xml`, `w`))

shutil.copyfile(src, dst)  (copyfile只拷貝檔案內容)
拷貝檔案

shutil.copyfile(`f1.log`, `f2.log`)

shutil.copy(src, dst) 拷貝檔案和許可權

shutil.copy(`f1.log`, `f2.log`)

shutil.copy2(src, dst)

拷貝檔案和狀態資訊

shutil.copy2(`f1.log`, `f2.log`

 

shutil.copymode(src, dst)  (前提是dst檔案存在,不然報錯)
僅拷貝許可權。內容、組、使用者均不變

shutil.copymode(`f1.log`, `f2.log`)

shutil.copystat(src, dst)
僅拷貝狀態的資訊,即檔案屬性,包括:mode bits, atime, mtime, flags

shutil.copystat(`f1.log`, `f2.log`)

 

shutil.ignore_patterns(*patterns)  (忽略哪個檔案,有選擇性的拷貝)

shutil.copytree(src, dst, symlinks=False, ignore=None)
遞迴的去拷貝資料夾

shutil.copytree(`folder1`, `folder2`, ignore=shutil.ignore_patterns(`*.pyc`, `tmp*`))
shutil.copytree(`f1`, `f2`, symlinks=True, ignore=shutil.ignore_patterns(`*.pyc`, `tmp*`))

shutil.rmtree(path[, ignore_errors[, onerror]])
遞迴的去刪除檔案

shutil.rmtree(`folder1`)

shutil.move(src, dst)
遞迴的去移動檔案,它類似mv命令,其實就是重新命名。

shutil.move(`folder1`, `folder3`)

 

 

shutil.make_archive(base_name, format,…)

建立壓縮包並返回檔案路徑,例如:zip、tar

建立壓縮包並返回檔案路徑,例如:zip、tar

  • base_name: 壓縮包的檔名,也可以是壓縮包的路徑。只是檔名時,則儲存至當前目錄,否則儲存至指定路徑, 如:www                        =>儲存至當前路徑 如:/Users/wupeiqi/www =>儲存至/Users/wupeiqi/
  • format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要壓縮的資料夾路徑(預設當前目錄)
  • owner: 使用者,預設當前使用者
  • group: 組,預設當前組
  • logger: 用於記錄日誌,通常是logging.Logger物件
     
    #將 /Users/wupeiqi/Downloads/test 下的檔案打包放置當前程式目錄
    
    import shutil
    
    ret = shutil.make_archive("wwwwwwwwww", `gztar`, root_dir=`/Users/wupeiqi/Downloads/test`)
    
     
    #將 /Users/wupeiqi/Downloads/test 下的檔案打包放置 /Users/wupeiqi/目錄
    
    import shutil
    
    ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", `gztar`, root_dir=`/Users/wupeiqi/Downloads/test`)
     

     

shutil 對壓縮包的處理是呼叫 ZipFile 和 TarFile 兩個模組來進行的,詳細:

import zipfile

# 壓縮
z = zipfile.ZipFile(`laxi.zip`, `w`)
z.write(`a.log`)
z.write(`data.data`)
z.close()

# 解壓
z = zipfile.ZipFile(`laxi.zip`, `r`)
z.extractall()
z.close()
import tarfile

# 壓縮
tar = tarfile.open(`your.tar`,`w`)
tar.add(`/Users/wupeiqi/PycharmProjects/bbs2.log`, arcname=`bbs2.log`)
tar.add(`/Users/wupeiqi/PycharmProjects/cmdb.log`, arcname=`cmdb.log`)
tar.close()

# 解壓
tar = tarfile.open(`your.tar`,`r`)
tar.extractall()  # 可設定解壓地址
tar.close()

備註:zipfile壓縮不會保留檔案的狀態資訊,而tarfile會保留檔案的狀態資訊

相關文章