Python基础---文件File的处理_make_archive()归档、解包、压缩、解压

归档、解包、压缩、解压
下文中主要记录函数的用法,一些不常用函数参数会省略。。

归档:将多个文件合并到一个文件中

归档函数: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()

猜你喜欢

转载自blog.csdn.net/abcdasdff/article/details/82528658