shutil模块——高级的文件、文件夹、压缩包处理模块
将文件内容拷贝到另一个文件 |
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()