• python- shutil 高级文件操作


    简介

    shutil模块提供了大量的文件的高级操作。特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作。对单个文件的操作也可参见os模块。

    拷贝文件

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

    shutil.copyfile("shutil_copyfile.py","shutil_copyfile.py.copy")

    copyfile()调用了底函数层copyfileobj()。

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

    copyfileobj(fsrc, fdst, length=16*1024)

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

     1 def copy(src, dst):
     2     """Copy data and mode bits ("cp src dst").
     3 
     4     The destination may be a directory.
     5 
     6     """
     7     if os.path.isdir(dst):
     8         dst = os.path.join(dst, os.path.basename(src))
     9     copyfile(src, dst)
    10     copymode(src, dst)

    shutil.copy2(src, dst): 类似shutil.copy,元数据也复制,实际上先调用shutil.copy,然后使用copystat。这类似于Unix命令cp -p。

    def copy2(src, dst):
        """Copy data and all stat info ("cp -p src dst").
    
        The destination may be a directory.
    
        """
        if os.path.isdir(dst):
            dst = os.path.join(dst, os.path.basename(src))
        copyfile(src, dst)
        copystat(src, dst)

    拷贝文件元数据

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

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

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

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

    shutil.copystat(src, dst): 从src复制权限位,最后访问时间,最后修改时间,flag到dst。该文件的内容,所有者和组不受影响。 src和dst的是给定的字符串路径名。

    opystat('shutil_copystat.py', 'file_to_change.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对象

    ret = shutil.make_archive("backup","tar",root_dir="/home/www/") #将/home/www目录下的文件进行备份,生成backup.tar的文件,其中tar为压缩包的后缀,www为压缩包文件名

     指定目录备份:

    >>> shutil.make_archive("/tmp/backup","tar",root_dir="/usr/local/python35")
    '/tmp/backup.tar'
    

      

    参考文档:http://blog.csdn.net/bytxl/article/details/27189045

  • 相关阅读:
    reindex-maven 私服(nexus)架设以及项目管理中遇到的问题及解决方案(updating)
    Maven 向私服nexus上传jar
    让 linux centos 文件夹地址栏 位置栏显示出来的方法
    JS版的Server.UrlEncode
    兼容火狐,ie8的 js urlencode和urldecode
    ORA-00257: archiver error. Connect internal only, until freed.
    【转载】spring mvc 使用session
    【转载】@RequestMapping的分类
    【转载】加密Spring加载的Properties文件
    [转载]meclipse中project facet问题
  • 原文地址:https://www.cnblogs.com/saneri/p/5033821.html
Copyright © 2020-2023  润新知