zoukankan      html  css  js  c++  java
  • shutil模块

    shutil模块

    提供了大量的文件的高级操作,特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作

    常用方法

    • shutil.copyfile(src, dst) 复制文件内容(不包含元数据)从src到dst。 DST必须是完整的目标文件名。如果src和dst是同一文件,就会引发错误shutil.Error。dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。特殊文件,例如字符或块设备和管道不能使用此功能,因为copyfile会打开并阅读文件。 src和dst的是字符串形式的路径名
    • shutil.copyfileobj(fsrc, fdst[, length]) 复制文件内容,从类文件对象src到类文件对dst。可选参数length指定缓冲区的大小,负数表示一次性读入。默认会把数据切分成小块拷贝,以免占用太多内存。注意:拷贝是从fsrc的当前文件开始
    • shutil.copymode(src,dst) 拷贝权限,不包括属主和属组
    • shutil.copy(src,dst) 拷贝文件,包括权限
    • shutil.copy2(src,dst) 拷贝文件,包括权限和状态信息 类似于Unix命令cp -p
    • shutil.copystat(src, dst) 拷贝文件状态
    • shutil.chown(name,user,group) 改变用户属主属组
      举例:
    import  shutil
    
    
    
    shutil.copyfile('test.xml','testxml.xml')       #拷贝文件
    shutil.copyfile('test.xml','testxml2.xml')       #拷贝文件
    shutil.copyfileobj(open('test.xml','r'),open('test1.xml','w'))       #拷贝文件内容
    shutil.copymode('test.xml','testxml.xml')    #将test.xml文件的权限拷贝给testxml.xml
    shutil.copy('test.xml','test3.xml')    #拷贝文件和权限
    shutil.copy2('test.xml','test4.xml')    #拷贝文件和状态
    
    
    结果:
    -rwxrwxrwx 1 root      staff   690  6 19 11:13 test.xml   #源文件
    -rwxrwxrwx 1 fuzengjie staff   690  6 22 17:50 testxml.xml*   #copyfile 的结果,又经过了copymode处理,权限改变,状态改变
    -rw-r--r-- 1 fuzengjie staff   690  6 22 17:50 testxml2.xml  #copyfile 的结果,元数据没有拷贝
    -rw-r--r-- 1 fuzengjie staff   690  6 22 17:50 test1.xml   #copyfileobj 的结果,元数据没有拷贝****
    -rwxrwxrwx 1 fuzengjie staff   690  6 22 17:50 test3.xml*   #copy的结果,权限没变,状态改变
    -rwxrwxrwx 1 fuzengjie staff   690  6 19 11:13 test4.xml*    #copy2的结果,权限和状态都没变
    • shutil.ignore_patterns(*patterns) 忽略某些文件
    • shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件,dst必须是不存在的一个目录
    >>> shutil.copytree('day07','test', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))    #拷贝day07目录为test
    'test'
    • shutil.rmtree 删除目录
     shutil.rmtree("test")
    • shutil.move(src,dst) 移动目录
    • shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,
      dry_run=0, owner=None, group=None, logger=None)

      • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www =>保存至当前路径 如:/Users/beyond/www =>保存至/Users/beyond/
      • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
      • root_dir: 要压缩的文件夹路径(默认当前目录)
      • owner: 用户,默认当前用户
      • group: 组,默认当前组
      • logger: 用于记录日志,通常是logging.Logger对象
    >>> shutil.make_archive("test",'tar',root_dir='day07')
    '/Users/fuzengjie/Git/gitlab/study/code/test.tar'
    >>> shutil.make_archive("test",'zip',root_dir='day07')
    '/Users/fuzengjie/Git/gitlab/study/code/test.zip'

    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。下面介绍两个模块的使用

    • zipfile()
    import zipfile
    z = zipfile.ZipFile("test.zip",'w')     #创建压缩文件
    z.write('newtest.xml')       #将需要压缩的文件写入压缩文件
    z.write('test.xml')
    z.close()
    
    z = zipfile.ZipFile("test.zip",'r')        #读压缩文件
    file_list  = z.namelist()                       #获取压缩文件中的文件列表
    z.extract('test1.xml')   #解压单个文件
    #z.extractall()             #解压所有文件
    • tarfile()
    import tarfile
    t = tarfile.open("test.tar","w")
    t.add("test.xml",arcname="aaaaaa")    #添加文件到压缩文件中,并取名aaaaa
    t.add("test.xml",arcname="bbb")    #添加文件到压缩文件中,并取名bbb
    
    t.close()
    
    
    
    t = tarfile.open("test.tar",'r')
    s = t.getnames()       #获取压缩文件中的文件列表
    t.extract('bbb')     #解压bbb文件
    #t.extractall()    #解压所有文件
    print(s)
  • 相关阅读:
    Centos7 Apache 2.4.18编译安装
    Centos7 mysql-community-5.7.11编译安装
    Centos7 安装MPlayer过程详解
    Vmware虚拟机克隆的网卡问题
    虚拟机VMware新增硬盘无法识别问题
    python推导式
    Python迭代器和生成器
    Python装饰器
    Python函数初识二
    Python函数初识
  • 原文地址:https://www.cnblogs.com/pycode/p/shutil.html
Copyright © 2011-2022 走看看