归档、解包、压缩、解压
下文中主要记录函数的用法,一些不常用函数参数会省略。。
归档:将多个文件合并到一个文件中
归档函数:make_archive()
语法:shutil.make_archive(base_name, format, base_dir)
base_name ---> 创建的目标文件名,包括路径,减去任何特定格式的扩展
format ---> 压缩包格式后缀:zip、tar、bztar、gztar
base_dir ---> 开始打包的路径
返回值:返回打包文件的绝对路径和名称
1 import shutil 2 # 将path_1处的文件归档到path_2处 3 path_1 = r'C:\Users\hasee\Desktop\test007' 4 path_2 = r'C:\Users\hasee\Desktop\new' 5 new_path = shutil.make_archive(path_2, 'zip', path_1) 6 print(new_path) 7 --->C:\Users\hasee\Desktop\new.zip
获取归档允许使用的后缀类型:get_archive_formats()
语法:shutil.get_archive_format()
返回值:列表
1 import shutil 2 3 val = shutil.get_archive_formats() 4 print(val) 5 --->[ 6 ('bztar', "bzip2'ed tar-file"), 7 ('gztar', "gzip'ed tar-file"), 8 ('tar', 'uncompressed tar file'), 9 ('xztar', "xz'ed tar-file"), 10 ('zip', 'ZIP file') 11 ]
解包:将归档的文件进行释放
解包函数:unpack_archive()
语法:shutil.unpack_archive(filename, extract_dir)
filename ---> 需要解包的文件,需要写明文件的后缀
extract_dir ---> 解包后文件存放位置
返回值:None
1 import shutil 2 # 将桌面的new.zip文件解包到桌面的001文件夹内 3 path_2 = r'C:\Users\hasee\Desktop\new.zip' 4 shutil.unpack_archive(path_2, r'C:\Users\hasee\Desktop\001')
获取系统可以解包的文件类型:get_unpack_formats()
语法:shutil.get_unpack_formats()
返回值:列表
1 import shutil 2 3 val = shutil.get_unpack_formats() 4 print(val) 5 --->[ 6 ('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), 7 ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), 8 ('tar', ['.tar'], 'uncompressed tar file'), 9 ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), 10 ('zip', ['.zip'], 'ZIP file') 11 ]
压缩与解压:
一、Zip文件操作:
1、压缩:
1、导入zipfile模块:import zipfile
2、创建压缩文件:zp = zipfile.ZipFile(file, mode=' ', compression=' ', allowZip64=)
file :创建zip压缩包的路径和名称
mode :模式 w、r、a
compression :zipfile.ZIP_STORED 默认值,压缩处理后,不改变文件大小
zipfile.ZIP_DEFLATED 压缩处理后,缩小
allowZip64 :操作超过2G大小的zip文件,需要设置该参数为True
3、在zip文件中添加内容:zp.write(filename, arcname) # 只能对文件进行添加,如果添加的是文件夹,则压缩结果是一个空的文件夹
filename :添加内容的路径和名称
arcname :添加后的新名称,默认为None不变
4、关闭压缩文件:zp.close()
1 import zipfile 2 3 zip_path = r'C:\Users\hasee\Desktop\001.zip' 4 zp = zipfile.ZipFile(zip_path, 'a', zipfile.ZIP_DEFLATED) 5 zp.write(r'C:\Users\hasee\Desktop\test_code\test1.py', 'test1.py') # 如果不添加arcname参数,则压缩后,会出现一堆路径上的目录文件夹 6 zp.write(r'C:\Users\hasee\Desktop\test_code\a.py', 'b.py') 7 zp.close()
5、zipfile模块不支持对文件夹的压缩,可以自己写一个程序进行实现
1 ''' 2 将文件夹进行压缩 3 ''' 4 import zipfile 5 import os 6 7 8 def add_file_zip(file_paths, zip_path): 9 ''' 10 功能:实现打包文件夹时,正确压缩其中的内容 11 参数:file_paths:需要打包压缩的文件的路径列表 12 zip_path:zip文件的路径 13 返回值:None 14 ''' 15 zp = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED, True) 16 # 循环遍历fill_paths,判断出其中是文件夹还是文件 17 for file_path in file_paths: 18 if os.path.isfile(file_path): 19 # os.sep判断系统间隔符,分割后取最后一个作为文件名称 20 zp.write(file_path, file_path.split(os.sep)[-1]) 21 22 elif os.path.isdir(file_path): 23 # 获取传入的路径中的路径部分的长度 24 pre_len = len(os.path.dirname(file_path)) 25 # os.walk()输出在目录中的文件名 26 for parent, dirnames, filenames in os.walk(file_path): 27 for filename in filenames: 28 # 组合出每个文件的路径 29 pathfile = os.path.join(parent, filename) 30 # 新名称,即相对路径 31 arcname = pathfile[pre_len:].strip(os.sep) 32 zp.write(pathfile, arcname) 33 34 else: 35 zp.write(file_path, file_path.split(os.sep)[-1]) 36 37 zp.close() 38 39 40 paths = [r'C:\Users\hasee\Desktop\test_code\test1.py', 41 r'C:\Users\hasee\Desktop\test_code\.vscode', 42 r'C:\Users\hasee\Desktop\test_code\__pycache__'] 43 add_file_zip(paths, r'C:\Users\hasee\Desktop\zips.zip')
2、解压:
1、打开zip文件:zp = zipfile.ZipFile(zip_path, 'r')
2、解压:1、指定其中的某个单个文件:zp.extract(member, path)
member 文件名,n. 成员
path 解压后的位置
2、解压全部文件:zp.extractall(path)
3、关闭文件:zp.close()
1 import zipfile 2 3 zip_path = r'C:\Users\hasee\Desktop\001.zip' 4 5 zp = zipfile.ZipFile(zip_path, 'r') 6 zp.extract('b.py', 'D:') 7 zp.extractall('D:')
二、Tar文件操作:
tar压缩时,如果压缩文件夹,会将其中的内容也进行压缩
1、压缩:
1、导入tarfile模块:import tarfile
2、创建压缩文件:tp = tarfile.open(file_path, mode)
file_path:新建tar文件的地址和名称
命名规则习惯: 在tar后缀后面添加上你使用的压缩算法,例如:.\file.tar.gz
如果不加,Windows系统中运行程序会在生成的tar文件中再来一个相同名字的tar文件
Linux系统没有测试
mode:w、r、a模式。
在tar压缩中,使用w:gz形式设定压缩算法,如果不加gz,则代表大小不进行压缩
'r' or 'r:*' Open for reading with transparent compression (recommended).
'r:' Open for reading exclusively without compression.
'r:gz' Open for reading with gzip compression.
'r:bz2' Open for reading with bzip2 compression.
'a' or 'a:' Open for appending with no compression. The file is created if it does not exist.
'w' or 'w:' Open for uncompressed writing.
'w:gz' Open for gzip compressed writing.
'w:bz2' Open for bzip2 compressed writing.
3、添加内容:tp.add(file_name, arcname) # arcname必须添加
4、关闭文件:tp.close()
1 import tarfile 2 3 tp = tarfile.open(r'C:\Users\hasee\Desktop\002.tar.gz', 'w:gz') 4 tp.add(r'C:\Users\hasee\Desktop\test_code\a.py', 'b.py') 5 tp.close()
2、解压:
1、打开tar文件:tp = tarfile.open(file_path, 'r')
2、解压:1、解压指定单个文件:tp.extract(file_name, path) ???
2、解压tar中全部文件:tp.extractall(path)
3、关闭文件:tp.close()
1 import tarfile 2 3 4 tp = tarfile.open(r'C:\Users\hasee\Desktop\002.tar.gz', 'r:gz') 5 tp.extractall(r'C:\Users\hasee\Desktop') 6 tp.close()