美文网首页
shutil模块:文件的高级操作,包括文件、文件夹和压缩包处理。

shutil模块:文件的高级操作,包括文件、文件夹和压缩包处理。

作者: 阿登20 | 来源:发表于2020-09-09 16:04 被阅读0次

    shutil模块

    image.png

    shutil模块是针对文件的高级操作,包括文件、文件夹和压缩包处理

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    """
    ===========================
    # @Time : 2020/9/1 23:02
    # @File  : shutil_.py
    # @Author: adeng
    # @Date  : 2020/9/1
    ============================
    """
    import shutil
    
    # 01.将文件内容拷贝到另一个文件中
    # shutil.copyfileobj(fsrc, fdst[, length])
    shutil.copyfileobj(open("01.txt","rb"), open("02.txt","wb"))
    
    # 02 拷贝文件
    # shutil.copyfile(src, dst)
    shutil.copyfile("01.txt","03.txt")  #dst 目标文件无需存在
    
    
    # 03 仅拷贝权限。内容、组、用户均不变
    # shutil.copymode(src, dst)
    
    shutil.copymode("01.txt","03.txt") # 目标文件必须存在
    
    
    # 04 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
    # shutil.copystat(src, dst)
    
    shutil.copystat("01.txt","02.txt") #目标文件必须存在
    
    
    # 05 拷贝文件和权限:dst无需存在
    # shutil.copy(src, dst)
    shutil.copy("01.txt","02.txt") # 拷贝文件和权限,相当与 copyfile()+ copymode()
    
    
    # 06 拷贝文件和状态信息 :dst文件无需存在
    # shutil.copy2(src, dst)
    shutil.copy2("01.txt","04.txt") # 相当与 copyfile()+ copystat()
    
    # 07 递归的去拷贝文件夹
    # shutil.copytree(src, dst, symlinks=False, ignore=None)
    # 目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
    # shutil.ignore_patterns() # 不拷贝指定文件
    # shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
    
    # shutil.copytree("f1","f2",ignore=shutil.ignore_patterns("*.txt","test*")) # f2文件必须不存在,.text结尾和test开头的不拷贝
    
    '''
    shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
    通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件
    '''
    
    
    # 08 递归的去删除文件
    # shutil.rmtree(path[, ignore_errors[, onerror]])
    
    shutil.rmtree('f2')
    
    # 09 递归的去移动文件,它类似剪切。原文件会消失
    # shutil.move(src, dst)
    
    shutil.move('f1', 'f2')
    
    """
    10 shutil.make_archive(base_name, format,...)
    
    创建压缩包并返回文件路径,例如:zip、tar
    
    base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    如 data_bak                       =>保存至当前路径
    如:/tmp/data_bak =>保存至/tmp/
    format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    root_dir:   要压缩的文件夹路径(默认当前目录)
    owner:  用户,默认当前用户
    group:  组,默认当前组
    logger: 用于记录日志,通常是logging.Logger对象
    """
    #将 /f2 下的文件打包放置当前程序目录
    
    ret = shutil.make_archive("data_bak", 'gztar', root_dir='f2')
    
    #将 /f2 下的文件打包放置 /tmp/目录
    
    ret1 = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir="f2")
    pass
    
    
    # shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
    
    
    """
    import zipfile
    
    # 压缩
    z = zipfile.ZipFile('laxi.zip', 'w')
    z.write('a.log')
    z.write('data.data')
    z.close()
    
    # 解压
    z = zipfile.ZipFile('laxi.zip', 'r')
    z.extractall(path='.')
    z.close()
    
    
    
    import tarfile
    
    # 压缩
    t=tarfile.open('/tmp/egon.tar','w')
    t.add('/test1/a.py',arcname='a.bak')
    t.add('/test1/b.py',arcname='b.bak')
    t.close()
    
    
    # 解压
    t=tarfile.open('/tmp/egon.tar','r')
    t.extractall('/egon')
    t.close()
    
    """
    
    image.png

    相关文章

      网友评论

          本文标题:shutil模块:文件的高级操作,包括文件、文件夹和压缩包处理。

          本文链接:https://www.haomeiwen.com/subject/qygeektx.html