• Python_Shutil模块_os模块的升级版


    一、拷贝文件

    1、shutil.copyfile(src, dst):复制文件内容(不包含元数据)从src到dst。 DST必须是完整的目标文件名;拷贝目录参见shutil.copy()。如果src和dst是同一文件,就会引发错误shutil.Error。dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。特殊文件,例如字符或块设备和管道不能使用此功能,因为copyfile会打开并阅读文件。 src和dst的是字符串形式的路径名。copyfile()调用了底函数层copyfileobj()。

    import shutil

    shutil.copyfile(r'E:python1.txt',r'E:python2.txt')

    ==>运行结果可以看到,1.txt中的内容被复制到了2.txt

    2、shutil.copyfileobj(fsrc, fdst[, length]):复制文件内容(不包含元数据)从类文件对象src到类文件对dst。可选参数length指定缓冲区的大小,负数表示一次性读入。默认会把数据切分成小块拷贝,以免占用太多内存。注意:拷贝是从fsrc的当前文件开始。如果fdst已经存在,它会被替换。

    import shutil

    f1 = open(r'E:python1.txt','r')

    f2 = open(r'E:python2.txt','w')

    shutil.copyfileobj(f1,f2,length=16*1024)

    f1.close()

    f2.close()

    ==>运行结果可以看到,1.txt中的内容被复制到了2.txt

    3、shutil.copy(src, dst):复制文件src到文件或目录dst。如果dst是目录,使用src相同的文件名创建(或覆盖),权限位也会复制。src和dst的是字符串形式的路径名。

    import shutil

    shutil.copy(r'E:python1.txt',r'E:python3.txt')

    ==>运行结果可以看到,1.txt中的内容被复制到了3.txt

    4、shutil.copy2(src, dst): 类似shutil.copy,元数据也复制,实际上先调用shutil.copy,然后使用copystat。这类似于Unix命令cp -p。dst最后一级目录下的文件不存在,则会被创建。

    import shutil

    shutil.copy2(r'E:python1.txt',r'E:python4.txt')

    ==>运行结果可以看到,1.txt中的内容被复制到了4.txt

    5、shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False):将src路径下的所有的目录及文件复制到dst所指定的目录下,注意dst中指定的目录必须要不存在。

    import shutil

    shutil.copytree(r'E:pythonproject',r'D:87')

    ==>运行后,可以看到在D盘下产生了87的目录结构,而7目录下的所有目录和文件则来自于E:pythonproject目录下的所有目录和文件。

    二、拷贝文件元数据

    当由UNIX下创建文件默认基于umask设置权限,copymode()可以复制权限。

    shutil.copymode(src, dst):从SRC复制权限位到DST。该文件的内容,所有者和组不受影响。src和dst的是字符串形式的路径名。

    copymode('shutil_copymode.py', 'file_to_change.txt')

    要想拷贝文件时间戳,需要copystat。

    1、shutil.copystat(src, dst): 从src复制权限位,最后访问时间,最后修改时间,flag到dst。该文件的内容,所有者和组不受影响。 src和dst的是给定的字符串路径名。dst最后一级目录下的文件不存在,则会报FileNotFoundError的错误。

    import shutil

    shutil.copystat(r'E:python1.txt',r'E:python5.txt')

    ==>运行后,5.txt的最后访问时间,最后修改时间,与1.txt相同

    三、压缩解压

    2.7以后的版本提供了压缩和解压功能。

    格式:shutil.make_archive(base_name, format[, root_dir[, base_dir, verbose, dry_run, owner, group, logger])

    base_name: 压缩包的文件名,也可以是压缩包的路径。如果是文件名时,则保存至当前目录,否则保存至指定路径,为路径时,最后一级目录名为压缩包的名称。
    format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”。
    root_dir: 要压缩的文件夹路径(默认当前目录)。
    owner: 用户,默认当前用户。
    group: 组,默认当前组。
    logger: 用于记录日志,通常是logging.Logger对象。

    import shutil

    shutil.make_archive(r'E:1','zip',r'E:python新建文件夹')

    ==>运行后,在E:1目录下,生成了一个叫1.zip的压缩文件。

    四、删除非空目录

    1、shutil.rmtree(path, ignore_errors=False, onerror=None):删除一个非空的目录,该目录下可以存在其他目录和文件。

    import shutil

    shutil.rmtree(r'E:python新建文件夹')

    ==>运行后,E:python新建文件夹   路径下的最后一个目录将会被删除。

  • 相关阅读:
    物联网数据卡系统源码——物联网的主要应用领域
    一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    memcached对key和value的限制 memcached的key最大长度和Value最大长度
    缓存技术PK:选择Memcached还是Redis?
    .Net开源框架列表
    项目管理工具Redmine各功能测试
    DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享
    ASP.NET Core 折腾笔记一
    发布:.NET开发人员必备的可视化调试工具(你值的拥有)
    开源发布:VS代码段快捷方式及可视化调试快速部署工具
  • 原文地址:https://www.cnblogs.com/zhangyuxin/p/7203203.html
Copyright © 2020-2023  润新知