第六章 常用模块(4):python常用模块(shutil)

shutil模块是一个 高级的文件,文件夹,压缩包处理模块。

包含各种形式的文件和文件夹的拷贝,删除,移动,压缩。

import shutil
  1. shutil.copyfileobj(fsrc,fdst[,length]) (循环的)读取文件内容并拷贝到另一个文件中,知道文件最后。可以设置循环的每次读取字符串的长度。(没有文件会创建)
    python import shutil shutil.copyfileobj(open('testfile1.txt','r'), open('testfile2.txt','w'))

  2. shutil.copyfile(src,dst) 复制文件。如果存在同名文件会覆盖(没有文件会创建)
    python import shutil shutil.copyfile('testfile1.txt', 'testfile2.txt')

  3. shutil.shutil.copymode(src,dst) 仅拷贝文件的权限。内容,所有者等文件信息不变。(dst不存在会报错)
    python import shutil shutil.copymode('testfile1.txt', 'testfile2.txt')

  4. shutil.copystat(src,dst) 拷贝状态信息(不拷贝内容),包括:mode,bits,atime,mtime,flags。文件的属组(所有者)不拷贝(dst不存在会报错)
    python import shutil shutil.copystat('testfile1.txt', 'testfile2.txt')

  5. shutil.copy(src,dst) 拷贝文件和权限。copyfile + copymode

  6. shutil.copy2(src,dst) 拷贝文件和状态信息。copyfile + copystat

  7. shutil.ignore_patterns(*patterns) .copytree(src,dst,symlinks=False,ignore=None) 递归的去拷贝文件
    python import shutil shutil.copytree('testfile1.txt', 'testfile2.txt', ignore=shutil.ignore_patterns('*.pyc','tmp*')) #拷贝整个目录,并且忽略*.pyc和tmp*

  8. shutil.rmtree(path[,ignore_errors[,onerror]]) 递归取删除文件

  9. shutil.move(src,dst)
    递归的移动文件,并删除指定的src文件夹。dst文件夹不存在则创建

    可以用于父级文件夹的重命名

  10. shutil.make_archive(base_name,format,...) 创建压缩包并返回文件路径(递归压缩)。例如:zip,tar

    • 参数:
      • base_name:压缩包的文件名,也可以是压缩包的路径。只传文件名时,则保存至当前目录,否则保存到指定路径。
      • format:压缩包种类,'zip','tar','bztar','gztar'
      • root_dir:要压缩的文件夹路径(默认当前目录)
      • owner:用户,默认当前用户
      • group:组,默认当前组
      • logger:用于记录日志,通常是logging.Logger对象
        ```python
        import shutil

    将 '/Users/xxx/Downloads/test' 压缩打包,命名为wwwww,保存在当前目录。注意防止转义,我们在字符串前放一个'r'

    ret = shutil.make_archive('wwwww','gztar',root_dir=r'/Users/xxx/Downloads/test')

    将 '/Users/xxx/Downloads/test' 压缩打包,保存为'/Users/xxx/ww'

    ret = shutil.make_archive(r'/Users/xxx/ww','gztar',root_dir=r'/Users/xxx/Downloads/test')

    用关键字的例

    ret = shutil.make_archive(base_name='zipfile',format='zip',root_dir=r'C:/Users/kouneli/Desktop/python/temp/')

    ```

    shutil对压缩包的处理是调用zipfile(压缩)和tarfile(打包)两个模块来实现的

扩展:

1. zipfile模块:压缩,解压

zipfile模块用于压缩和解压文件。 注意:zipfile不能直接递归压缩文件夹,需要遍历压缩。

  • 使用例:
    ```python
    import zipfile
    import os

    # 压缩
    # z = zipfile.ZipFile(r'C:\Users\kouneli\Desktop\test_zip.zip', 'w') # 生成压缩用的对象
    # z.write('file1.txt') # 压入文件
    # z.close() # 进行压缩

    # 递归压缩的实现
    z = zipfile.ZipFile(r'C:\Users\kouneli\Desktop\test_zip.zip', 'w') # 生成压缩用的对象
    src_dir = os.walk(r'C:\Users\kouneli\Desktop\python\homework')
    # 返回的是(路径,路径内的文件夹,路径内的文件),(子路径,子路径内的文件夹,子路径内的文件)元组组成的iter对象

    # print(list(src_dir)) # 转成列表形式看下返回值

    filelist = []
    for root_dir, dirs, files in src_dir:
    for filename in files:
    filelist.append(os.path.join(root_dir,filename)) # 把文件的路径和文件名拼接起来(拼成结对路径),然后放入列表中。

    for i in filelist:
    print(i)
    z.write(i) # 压入压缩包文件

    z.close() # 关闭压缩包文件

    # 解压
    z = zipfile.ZipFile(r'C:\Users\kouneli\Desktop\test_zip.zip', 'r') # 生成解压对象,主要是'r'模式
    z.extractall(path= r'C:\Users\kouneli\Desktop\extra_zip') # 解压到的路径
    z.close()
    ```

2. tarfile模块:打包

tarfile的作用是给文件打包,并不压缩。

其用法类似于zipfile,这里我们不予举例。

猜你喜欢

转载自www.cnblogs.com/py-xiaoqiang/p/11110866.html