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會保留文件的狀態信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM