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

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

shutil.copyfileobj('fsrc', 'fdst', 'length') spa

  方法源碼:日誌

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)   # 寫入目標文件

  使用:code

>>> 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):拷貝文件orm

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

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

>>> 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):拷貝文件權限。內容、組、用戶均不變blog

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

遞歸操做

shutil.ignore_patterns(*patterns)ip

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()
相關文章
相關標籤/搜索