將文件內容拷貝到另外一個文件 |
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()