1. 程式人生 > >shutil模塊——高級的文件、文件夾、壓縮包處理模塊

shutil模塊——高級的文件、文件夾、壓縮包處理模塊

body group tree post ger 移動 stat for rac

將文件內容拷貝到另一個文件

shutil.copyfileobj(‘fsrc‘, ‘fdst‘, ‘length‘)

  方法源碼:

def copyfileobj(fsrc, fdst, length=16*1024): 
    # copy data from file-like object fsrc to file-like object fdst
    while 1:  # 死循環
        buf = fsrc.read(length)   # 每次讀這麽長,直到讀完
        if not buf:
            break
        fdst.write(buf)   
# 寫入目標文件

  使用:

>>> import shutil
>>> shutil.copyfileobj(open(old.xml,r), open(new.xml, w))
>>>
>>> f1 = open("sheve_test.py","r")
>>> f2 = open("sheve_test_new.py","w")
>>> shutil.copyfileobj(f1,f2)
文件拷貝

shutil.copyfile(src, dst):拷貝文件

shutil.copyfile(f1.log, f2.log) #目標文件無需存在

shutil.copy(src, dsr):拷貝文件和權限

>>> import shutil
>>> shutil.copy(test.py, test_copy.py) 
>>> exit()

#:Desktop hqs$ ls -lrt
total 16
-rw-r--r--  1 hqs  staff  124  4  4 10:46 test.py
-rw-r--r--  1 hqs  staff  124  4  4 11:42 test_copy.py

shutil.copy2(src, dsr):拷貝文件和狀態信息

>>> import shutil
>>> shutil.copy2(test.py, test_copy2.py)

shutil.copymode(src, dsr):拷貝文件權限。內容、組、用戶均不變

shutil.copystat(src, dsr):拷貝狀態信息。包括:mode\bits\atime\mtime\flags

遞歸操作

shutil.ignore_patterns(*patterns)

shutil.copytree(src, dst, symlinks=False, ignore=None) :遞歸拷貝文件夾,symlinks是軟鏈接,ignore是忽略

shutil.rmtree():遞歸刪除

shutil.move(src, dst):遞歸移動文件(實質是重命名)

shutil.copytree(packages,pack2)
shutil.copytree(packages,pack3,ignore=shutil.ignore_patterns("__init__.py","view.py"))

# shutil.rmtree(path[,ignore_errors[,onerror]])   # 遞歸地去刪除文件
shutil.rmtree("pack2")

# shutil.move(src,dst)  # 遞歸地去移動文件(剪切)
shutil.move("pack3","pack4")
文件壓縮

shutil.make_archive(base_name, format, ...):創建壓縮包並返回文件路徑

#將 /data 下的文件打包放置當前程序目錄
import shutil
ret = shutil.make_archive("data_bak", gztar, root_dir=/data)

#將 /data下的文件打包放置 /tmp/目錄
import shutil
ret = shutil.make_archive("/tmp/data_bak", gztar, root_dir=/data)

  base_name:壓縮包文件名或路徑(保存到當前目錄或指定目錄)

  format:壓縮包種類(zip\tar\bztar\gztar)

  owner:用戶,默認當前用戶

  group:組,默認當前組

  logger:用於記錄日誌,通常是logging.Logger對象

>>> import shutil
>>> shutil.make_archive(test_bak, gztar)
test_bak.tar.gz
>>> exit()
# Desktop hqs$ ls -lrt
total 32
-rw-r--r--  1 hqs  staff  124  4  4 10:46 test_copy2.py
-rw-r--r--  1 hqs  staff  124  4  4 10:46 test.py
-rw-r--r--  1 hqs  staff  124  4  4 11:42 test_copy.py
-rw-r--r--  1 hqs  staff  673  4  4 12:07 test_bak.tar.gz
壓縮文件處理

zipfile壓縮&解壓縮

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(path=.)
z.close()

tarfile壓縮&解壓縮

import tarfile

# 壓縮
>>> t=tarfile.open(/tmp/egon.tar,w)
>>> t.add(/test1/a.py,arcname=a.bak)
>>> t.add(/test1/b.py,arcname=b.bak)
>>> t.close()

# 解壓
>>> t=tarfile.open(/tmp/egon.tar,r)
>>> t.extractall(/egon)
>>> t.close()

shutil模塊——高級的文件、文件夾、壓縮包處理模塊