zoukankan      html  css  js  c++  java
  • shutil模块——高级的文件、文件夹、压缩包处理模块

    将文件内容拷贝到另一个文件

    shutil.copyfileobj('fsrc', 'fdst', 'length') 

      方法源码:

    def copyfileobj(fsrc, fdst, length=16*1024): 
        # copy data from file-like object fsrc to file-like object fdst
        while 1:  # 死循环
            buf = fsrc.read(length)   # 每次读这么长,直到读完
            if not buf:
                break
            fdst.write(buf)   # 写入目标文件

      使用:

    >>> import shutil
    >>> shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
    >>>
    >>> f1 = open("sheve_test.py","r")
    >>> f2 = open("sheve_test_new.py","w")
    >>> shutil.copyfileobj(f1,f2)
    文件拷贝

    shutil.copyfile(src, dst):拷贝文件

    shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

    shutil.copy(src, dsr):拷贝文件和权限

    >>> import shutil
    >>> shutil.copy('test.py', 'test_copy.py') 
    >>> exit()
    
    #:Desktop hqs$ ls -lrt
    total 16
    -rw-r--r--  1 hqs  staff  124  4  4 10:46 test.py
    -rw-r--r--  1 hqs  staff  124  4  4 11:42 test_copy.py

    shutil.copy2(src, dsr):拷贝文件和状态信息

    >>> import shutil
    >>> shutil.copy2('test.py', 'test_copy2.py')

    shutil.copymode(src, dsr):拷贝文件权限。内容、组、用户均不变

    shutil.copystat(src, dsr):拷贝状态信息。包括:modeitsatimemtimeflags

    递归操作

    shutil.ignore_patterns(*patterns)

    shutil.copytree(src, dst, symlinks=False, ignore=None)  :递归拷贝文件夹,symlinks是软链接,ignore是忽略

    shutil.rmtree():递归删除

    shutil.move(src, dst):递归移动文件(实质是重命名)

    shutil.copytree('packages','pack2')
    shutil.copytree('packages','pack3',ignore=shutil.ignore_patterns("__init__.py","view.py"))
    
    # shutil.rmtree(path[,ignore_errors[,onerror]])   # 递归地去删除文件
    shutil.rmtree("pack2")
    
    # shutil.move(src,dst)  # 递归地去移动文件(剪切)
    shutil.move("pack3","pack4")
    文件压缩

    shutil.make_archive(base_name, format, ...):创建压缩包并返回文件路径

    #将 /data 下的文件打包放置当前程序目录
    import shutil
    ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
    
    #将 /data下的文件打包放置 /tmp/目录
    import shutil
    ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

      base_name:压缩包文件名或路径(保存到当前目录或指定目录)

      format:压缩包种类(zip arztargztar)

      owner:用户,默认当前用户

      group:组,默认当前组

      logger:用于记录日志,通常是logging.Logger对象

    >>> import shutil
    >>> shutil.make_archive('test_bak', 'gztar')
    'test_bak.tar.gz'
    >>> exit()
    # Desktop hqs$ ls -lrt
    total 32
    -rw-r--r--  1 hqs  staff  124  4  4 10:46 test_copy2.py
    -rw-r--r--  1 hqs  staff  124  4  4 10:46 test.py
    -rw-r--r--  1 hqs  staff  124  4  4 11:42 test_copy.py
    -rw-r--r--  1 hqs  staff  673  4  4 12:07 test_bak.tar.gz
    压缩文件处理

    zipfile压缩&解压缩

    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()

    tarfile压缩&解压缩

    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()
  • 相关阅读:
    左旋转字符串
    swoole(8)http服务
    整数反转
    两数之和
    广度优先搜索
    快速排序
    JavaScript当中的eval函数
    JavaScript中的作用域链原理
    git push和git pull
    cherry-pick,revert和rebase使用的3-way合并策略
  • 原文地址:https://www.cnblogs.com/xiugeng/p/8716565.html
Copyright © 2011-2022 走看看