最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python常用模块之shutil

    正文概述    2020-06-24   308

    Python常用模块之shutil

    常用模块 - shutil模块

    一、简介

    shutil – Utility functions for copying and archiving files and directory trees.(用于复制和存档文件和目录树的实用功能。)

    shutil是shell

    utility的缩写

    shutil.move直接从一个地方挪到另一个地方,而os.rename常常只能重命名,不能挪动位置。

    功能是:

    >>>shutil.move('old.txt',r'c:datarchive')
    >>>shutil.copy('old.txt',r'c:datarchive')
    >>>os.remove('junk.dat')

    相关推荐:《Python视频教程》

    二、高级文件操作(拷贝/移动/压缩/解压缩)

    #!/usr/bin/env python
    # coding=utf-8
    __author__ ='zhuo'
    __date__ ='2017/5/25'
    # shutil_demo.py高级文件操作(拷贝/移动/压缩/解压缩)
    importshutil
    defshutil_demo():
    #拷贝文件
    shutil.copy2('file.txt','temp.txt')
    #拷贝目录
    shutil.copytree("root","temp", symlinks=False,
    ignore=shutil.ignore_patterns("*.pyc"), copy_function=shutil.copy2, ignore_dangling_symlinks=True)
    #删除目录
    shutil.rmtree("temp", ignore_errors=True)
    #移动文件/目录
    shutil.move("root","temp",copy_function=shutil.copy2)
    #获取磁盘使用空间
    total, used, free =shutil.disk_usage(".")
    print("当前磁盘共:
    %iGB,已使用: %iGB,剩余:
    %iGB"%(total
    /1073741824, used /1073741824, free /1073741824))
    #压缩文件
    shutil.make_archive('Box','zip','temp')
    #解压文件
    shutil.unpack_archive('Box.zip')
    defshutil_func():
    #文件和目录操作
    # shutil.copyfileobj(fsrc, fdst[,
    length]) //拷贝文件内容,将fsrc文件里的内容copy到fdst文件中, length:缓冲区大小
    shutil.copyfileobj(open('file.txt','r'), open('temp.txt','w'))
    # shutil.copyfile(src, dst, *,
    follow_symlinks=True) //拷贝文件内容,同copyfileobj,如果dst=src,抛SameFileError异常, dst存在则替换
    dst = shutil.copyfile('file.txt','temp.txt')
    # shutil.copymode(src, dst, *,
    follow_symlinks=True) //仅拷贝权限,其他信息不受影响
    shutil.copymode('file.txt','temp.txt')
    # shutil.copystat(src, dst, *,
    follow_symlinks=True) //拷贝状态(权限/最后访问时间/上次修改时间/标志),其他不受迎影响
    shutil.copystat('file.txt','temp.txt')
    # shutil.copy(src, dst, *,
    follow_symlinks=True) //拷贝文件(数据/权限)
    dst = shutil.copy('file.txt','temp.txt')
    # shutil.copy2(src, dst, *,
    follow_symlinks=True) //拷贝文件(尝试保留所有元数据) (不能拷贝创建时间,该时间可通过修改系统时间再创建文件来实现)
    dst = shutil.copy2('file.txt','temp.txt')
    # shutil.ignore_patterns(*patterns)
    # symlinks:True(复制链接) / False(复制文件),
    ignore=ignore_patterns("") //忽略的文件,
    copy_function=自定义复制函数,
    ignore_dangling_symlinks:True(忽略文件不存在异常) / False(错误列表中添加异常)
    # shutil.copytree(src, dst,
    symlinks=False, ignore=None, copy_function=copy2,
    ignore_dangling_symlinks=False) //递归的复制根目录下的整个目录树
    dst = shutil.copytree("root","temp", symlinks=False,
    ignore=shutil.ignore_patterns("*.pyc"), copy_function=shutil.copy2,
    ignore_dangling_symlinks=True)
    # shutil.rmtree(path,
    ignore_errors=False, onerror=None) //删除整个目录树, ignore_errors:是否忽略删除失败错误, onerror=def
    error(func, path, excinfo)
    shutil.rmtree("temp", ignore_errors=True)
    # shutil.move(src, dst, copy_function=copy2)
    //递归移动文件/目录,目录存在则移动目录,文件存在则覆盖
    dst = shutil.move("root","temp",copy_function=shutil.copy2)
    total, used, free =shutil.disk_usage(".")#给定路径的磁盘使用情况统计信息
    # shutil.chown(path, user=None,
    group=None) //修改用户和组(Unix可用)
    # shutil.which(cmd, mode=os.F_OK |
    os.X_OK, path=None) //可执行文件路径, path:要查找的路径,未指定使用os.environ的结果
    path_str = shutil.which("python")
    #异常
    try:pass
    exceptshutil.SameFileError:pass# copyfile()时,源和目录是同一个文件时,抛此异常
    exceptshutil.Error:pass# copytree()时,多文件操作时引发的异常,异常包含(srcname, dstname, excinfo)
    #压缩文件操作(封装了zipfile / tarfile)
    #创建归档文件base_name:压缩包文件名, format:格式zip / tar / bztar / xztar / gztar, root_dir:被归档的根目录(默认当前目录)
    # base_dir:保存归档文件的目录(默认当前目录)
    verbose:已弃用dry_run:True(不创建归档,但记录日志),
    owner:用户, group:用户组, logger:日志
    # shutil.make_archive(base_name,
    format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[,
    logger]]]]]]])
    dst = shutil.make_archive('Box','zip','temp')#注意:root_dir /
    base_dir至少写一个,不然会造成压缩包再次被打包的情况
    #分拆归档,
    filename:文件名, extract_dir:解压到目录(默认当前目录),
    format:格式(未提供,根据扩展名查找,未找到引发ValueError)
    # shutil.unpack_archive(filename[,
    extract_dir[, format]])
    shutil.unpack_archive('Box.zip')
    lists =shutil.get_archive_formats()#返回支持的归档格式列表[(format, info)]
    lists =shutil.get_unpack_formats()#返回所有注册格式的列表[(name, extensions, description)]
    #注册压缩格式,
    name:格式名, function:def func(base_name, base_dir,
    owner, group, dry_run, logger), extra_args:额外参数,
    description:说明信息
    # shutil.register_archive_format(name,
    function[, extra_args[, description]])
    # shutil.unregister_archive_format(name)
    //注销压缩格式
    #注册解压格式name:格式名, extensions:扩展名列表, function:实现函数def unpack(filename, extract_dir),
    extra_args:额外参数(name, value),
    description:说明
    # shutil.register_unpack_format(name,
    extensions, function[, extra_args[, description]])
    # shutil.unregister_unpack_format(name)
    //注销解压格式
    #终端
    #
    shutil.get_terminal_size(fallback=(columns, lines))
    columns, lines = shutil.get_terminal_size()#查询终端大小(宽,高),无法查询返回默认大小(80, 24)
    if__name__ =="__main__":
    shutil_demo()
    # shutil_func()

    三、实例

    #!/usr/bin/python3
    # -*- coding:utf-8 -*- 
    import shutil
     
    # 1 shutil.copyfileobj(fsrc, fdst[, length=16*1024])
    # copy文件内容到另一个文件,可以copy指定大小的内容
    # 注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作
    f1 = open("1.txt", "r")
    f2 = open("2.txt", "w+")
    shutil.copyfileobj(f1, f2)
     
    # 2 shutil.copyfile(src,dst)
    # copy文件内容,是不是感觉上面的文件复制很麻烦?还需要自己手动用open函数打开
    # 文件,在这里就不需要了,事实上,copyfile调用了copyfileobj
    shutil.copyfile("1.txt", "3.txt")
     
    # 3 shutil.copymode(src,dst)
    # 仅copy权限,不更改文件内容,组和用户。
    shutil.copymode("1.txt", "3.txt")
     
    # 4 shutil.copystat(src,dst)
    # 复制所有的状态信息,包括权限,组,用户,时间等
    shutil.copystat("1.txt", "3.txt")
     
    # 5 shutil.copy(src,dst)
    # 复制文件的内容以及权限,先copyfile后copymode
    shutil.copy("1.txt", "4.txt")
     
    # 6 shutil.copy2(src,dst)
    # 复制文件的内容以及文件的所有状态信息。先copyfile后copystat
    shutil.copy2("1.txt", "5.txt")
     
    # 7 shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)
    # 递归的复制文件内容及状态信息
    shutil.copytree("1", "2")
     
    # 8 shutil.rmtree(path, ignore_errors=False, onerror=None)
    # 递归地删除文件
    shutil.rmtree("2")
     
    # 9 shutil.move(src, dst)
    # 递归的移动文件
    shutil.move("1", "2")
     
    # 10 make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)
    # 压缩打包
    # base_name: 压缩打包后的文件名或者路径名
    # format:    压缩或者打包格式    "zip", "tar", "bztar"or "gztar"
    # root_dir:   将哪个目录或者文件打包(也就是源文件)
    shutil.make_archive("压缩包", "zip", r"2")
     
    # 入口函数
    if __name__ == '__main__':
        pass

    下载网 » Python常用模块之shutil

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元