模块讲解----shutil模块(copy、压缩、解压)
作用与功能
主要用于文件的copy,压缩,解压
导入shuitl模块:
import shutil
copy方法
1 1、shutil.copyfileobj() 打开file1,并copy写入file2: 2 with open("笔记1",'r',encoding='utf-8') as f1,open('笔记2','w',encoding='utf-8') as f2: 3 shutil.copyfileobj(f1,f2) 4 5 6 7 #输入文件名就能直接拷贝(调用copyfileobj方法) 8 shutil.copyfile("笔记1","笔记3") 9 10 11 12 #拷贝权限,内容,组,用户均不变:(win看不出来,linux下可以尝试) 13 shutil.copymode("笔记1","笔记3") 14 15 16 17 #拷贝状态的信息(只拷贝权限,不创建文件),包括:mode bits,atime,mtime,flags 18 shutil.copystat("笔记1","笔记3") 19 20 21 22 #拷贝文件和权限: 23 shutil.copy("笔记1","笔记3") 24 25 26 27 #拷贝文件和状态信息:(文件和权限) 28 shutil.copy2("笔记1","笔记3") 29 30 31 32 33 #递归的去copy文件:(copy目录) 34 shutil.copytree(r"D:\a",r"D:\a1") 35 例如:用python脚本实现代码发布指定线上服务器,例如svn和git在发布的时候,有些文件是不需要进行拷贝的,因袭就需要进行过滤 36 方法如下: 37 shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) 38 39 40 41 #递归的删除目录:(有链接占中目录,删除报错) 42 shutil.rmtree(r"D:\a1") 43 44 45 46 #移动文件: 47 shutil.move(r"D:\a",r"D:\a1")
压缩和解压缩方法
1 1、全目压缩: 2 #创建压缩包,并返回文件路径:例如:zip tar 3 #创建压缩包并返回文件路径,例如:zip、tar 4 #格式:shutil.make_archive(base_name,format(zip),root_dir,owner,group,logger) 5 # base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 6 # 如:www =>保存至当前路径 7 # 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/ 8 # format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” 9 # root_dir: 要压缩的文件夹路径(默认当前目录) 10 # owner: 用户,默认当前用户 11 # group: 组,默认当前组 12 # logger: 用于记录日志,通常是logging.Logger对象 13 #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录 14 15 import shutil 16 ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test') 17 18 #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录 19 import shutil 20 ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test') 21 22 #将D:\软件\pychar\data\s13\Atm目录下的文件打包放置在D:\软件\pychar\data\s13\Atm_name_tar文件下 23 shutil.make_archive(r"D:\软件\pychar\data\s13\Atm_name_tar","tar","D:\软件\pychar\data\s13\Atm") 24 25 ========================================================================== 26 三、解压方法和指定文件的压缩和解压: 27 28 2、Zip单个文件压缩与解压:(打包在压缩) 29 (压缩包也可以当做一个文件,想要加入压缩文件的话可以直接写进压缩包里) 30 31 2.1:#写入指定压缩文件(w) 32 z = zipfile.ZipFile(r'D:\软件\pychar\data\test\node.zip', 'w') 33 z.write('笔记1') 34 z.write('笔记3') 35 z.close() 36 37 2.2 #追加指定压缩(a) 38 z = zipfile.ZipFile(r'D:\软件\pychar\data\test\node.zip', 'a') 39 z.write('test.py') 40 z.write('md_sys_test.py') 41 z.close() 42 43 44 2.3:z.extractall() 解压所有文件:(所有文件) 45 os.chdir(r"D:\软件\pychar\data\test") 46 z = zipfile.ZipFile("node.zip",'r') 47 z.extractall() 48 z.close() 49 50 51 2.4:z.extract('test.py') 解压指定文件: 52 只需要传输字符串格式的文件名即可 53 os.chdir(r"D:\软件\pychar\data\test") 54 z = zipfile.ZipFile("node.zip",'r') 55 for item in z.namelist(): 56 if item == 'test.py': 57 z.extract('test.py') 58 z.close() 59 60 61 62 63 64 ============================================================================================= 65 3、tar单个文件压缩与解压:(tar只打包不压缩) 66 3.1、写入指定压缩文件(w) 67 import tarfile 68 69 tar = tarfile.open(r'D:\软件\pychar\data\test\your.tar','w') 70 tar.add(r'D:\软件\pychar\data\test\test.py', arcname='bbs2.log') 71 tar.add(r'D:\软件\pychar\data\test\md_sys_test.py', arcname='cmdb.log') 72 tar.close() 73 74 3.2、添加指定压缩文件(a) 75 tar = tarfile.open(r'D:\软件\pychar\data\test\your.tar','a') 76 tar.add(r'D:\软件\pychar\data\test\笔记1', arcname='node1.txt') 77 tar.add(r'D:\软件\pychar\data\test\笔记3', arcname='node3.txt') 78 tar.close() 79 80 81 3.3、解压所有文件 82 os.chdir(r"D:\软件\pychar\data\test") 83 tar = tarfile.open('your.tar','r') 84 tar.extractall() # 可设置解压地址 85 tar.close() 86 87 3.4、解压指定文件 88 tar.getmembers():遍币所有压缩包内的文件对象(非文件字符串) 89 tar.getmember("node1.txt"):指定压缩包内的某个文件 90 os.chdir(r"D:\软件\pychar\data\test") 91 tar = tarfile.open('your.tar','r') 92 for item in tar.getmembers(): 93 job = tar.getmember("node1.txt") 94 if item == job: 95 tar.extract(job) 96 tar.close()