归档、解包、压缩、解压
下文中主要记录函数的用法,一些不常用函数参数会省略。。
归档:将多个文件合并到一个文件中
归档函数:make_archive()
语法:shutil.make_archive(base_name, format, base_dir)
base_name ---> 创建的目标文件名,包括路径,减去任何特定格式的扩展
format ---> 压缩包格式后缀:zip、tar、bztar、gztar
base_dir ---> 开始打包的路径
返回值:返回打包文件的绝对路径和名称
复制代码
1 import shutil
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
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')
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
17 for file_path in file_paths:
18 if os.path.isfile(file_path):
19
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
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)
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()