shutil模块

高级的 文件、文件夹、压缩包 处理模块

os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作。比如说:绝对路径,父目录……  但是,os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供。
而本文所讲的shutil则就是对os中文件操作的补充。--移动 复制  打包 压缩 解压。

    1、shutil.copyfileobj(fsrc, fdst[, length])

import shutil
  f1 = open("alexsb","r",encoding="utf-8")

  f2 = open("文件2","w",encoding='utf-8')
  shutil.copyfileobj(f1,f2)
  f1.close()
  f2.close()
    把一个文件复制到另外一个文件,记得要同时打开两个文件,如果是Windows,要加上encoding="utf-8",以"utf-8"读取和复制。

    2、shutil.copyfile(src, dst)

源代码:从下面源代码可以看出,copyfile()方法自己打开模块,不需要我们再去打开模块,第一个模块是以"rb"模式打开,第二个模式是以"wb"模式打开,如果文件存在,从冲掉之前文件里面的内容。

def copyfile(src, dst, *, follow_symlinks=True):
if _samefile(src, dst):
raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
for fn in [src, dst]:
try:
st = os.stat(fn)
except OSError:
# File most likely does not exist
pass
else:
# XXX What about other special files? (sockets, devices...)
if stat.S_ISFIFO(st.st_mode):
raise SpecialFileError("`%s` is a named pipe" % fn)
if not follow_symlinks and os.path.islink(src):
os.symlink(os.readlink(src), dst)
else:
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
copyfileobj(fsrc, fdst)
return dst

import shutil
  shutil.copyfile("文件2","文件3")

shutil.copyfile("被赋值文件","赋值文件")也是赋值文件,只是不需要打开文件,把一个文件赋值到另外一个文件中,如果这个文件不存在,则新建一个文件。

    3.shutil.copymode(src, dst)

仅拷贝权限。内容、组、用户均不变

    def copymode(src,dst):

    '''Copy mode bits from src to dst'''

  if hasattr(os,"chmod"):

      st = os.stat(src)

      mode = stat.S_IMODE(st,st_mode)

      os.chmod(dst,mode)

在Linux平台上,文件有很多权限,shutil.copymode(src,dst)只让用户copy权限,不复制文件内容。

    4.shutil.copystat(src, dst)

    拷贝状态的信息,包括:mode bits, atime, mtime, flags

import shutilf1 = open("文件2","rb")
  f2 = open("文件4","wb")
  shutil.copystat("文件2","文件4")

    5.shutil.copy(src, dst)

    复制文件的内容以及权限,先copyfile后copymode

    6.shutil.copy2(src, dst)

复制文件的内容以及文件的所有状态信息。先copyfile后copystat  

    7.shutil.ignore_patterns(*patterns)

    8.shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)

递归的复制文件内容及状态信息

shutil.copytree()递归地copy目录和文件,等于复制了一份完全一样的源文件。

import shutil
    shutil.copytree("copytrees","new_copytrees")

创建一个一模一样的目录和文件,复制里面所有的内容,这个功能还是很强大的。就相当于直接点击复制粘贴。

    9.shutil.rmtree(path[, ignore_errors[, onerror]])

递归的去删除文件

import shutil
  shutil.rmtree("new_copytrees")

shutil.rmtree(path)是递归的删除文件,即便文件里面有内容也能够删除,我们知道,os.rmdir()如果文件有内容是不能删除的,相比较,系统的功能是强大很多,从底层删除文件。

    10.shutil.move(src, dst)

递归的去移动文件

    11.shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)

创建压缩包并返回文件路径,例如:zip、tar

(1)base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

如:www     >>保存至当前路径

         如:/users/wupeiqi/www   ==>>保存至/Users/wupeiqi/下面

(2)format:压缩包种类,"zip","tar","bztar","gztar"

(3)root_dir:要压缩的文件夹路径(默认当前目录)

(4)owner:用户,默认当前用户

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

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录

import shutil
  ret = shutil.make_archive("只能压缩文件", 'gztar', root_dir='/home/zhuzhu/第五天/copytrees')

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录

import shutil

  ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

make_archive()只能压缩目录(directory),不能压缩文件(file)或这.py文件,只能是整体把文件目录进行压缩。

shutil对文件的压缩是通过调用zipfile和tarfile来进行压缩的。

    zipfile  模块压缩解压

zipfile能够指定压缩那个目录的文件,就是可以自助定义压缩,也是比较好的,我们可以压缩文件,shutil只能整体压缩目录,而zipfile能够压缩各个文件(File)类型。

实例如下:

    压缩

import zipfile
  '''调用zipfile模块,随便压缩问价'''

  z = zipfile.ZipFile("想压谁压谁.zip","w")     #创建一个压缩包
  z.write("/home/zhuzhu/第五天/文件2")          #向压缩包添加压缩文件2
  z.write("/home/zhuzhu/第五天/time_sleep.py")  #向压缩包添加Python脚本time_sleep.py
  z.close()    #关闭压缩文件

    解压

   import zipfile
  '''调用zipfile模块解压文件'''

  z = zipfile.ZipFile("想压谁压谁.zip","r") #解压文件
  z.extractall() #调用extract()解压
  z.close()

   tarfile  模块压缩解压

tar压缩

import tarfile

  z = tarfile.open("test.tar","w")
  '''打开压缩文件,如果压缩包不存在,则重新创建,如果存在,则删除里面的内容'''
  z.add("/home/zhuzhu/第五天/文件3") #向压缩包添加压缩文件
  z.add("/home/zhuzhu/第五天/sys_argv.py")
  z.close() #关闭压缩包
    tar解压

import tarfile
  '''解压文件'''

  z = tarfile.open("test.tar","r")
  z.extractall()
  z.close()

zipfile和tarfile压缩解压文件。

day5模块学习--shutil模块的更多相关文章

  1. os模块和shutil模块

    # coding=utf-8 import os path="D:\\test" ######### 目录结构如下 # test # / \ \ \ # test01 test02 ...

  2. python常用模块之shutil模块

    python常用模块之shutil模块 shutil模块,高级的文件.文件夹.压缩包处理模块 1.shutil.copyfile(src,des[,length]):将文件内容拷贝到另一个文件 In ...

  3. [转]python中对文件、文件夹的操作——os模块和shutil模块常用说明

    转至:http://l90z11.blog.163.com/blog/static/187389042201312153318389/ python中对文件.文件夹的操作需要涉及到os模块和shuti ...

  4. 元数据的概念以及相关的操作os模块、shutil模块

    查看文件的元数据 stat [OPTION]… FILE… OPTION: -f 输出文件系统的状态,而非文件的状态 -t 显示简要格式的文件元数据信息 FILE:可同时查看多个文件的元数据信息,多个 ...

  5. day5模块学习 -- os模块学习

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  6. python学习shutil模块的文件压缩和解压用法

    shutil模块可以创建压缩包并返回文件路径,例如 zip,tar,下面详细其用法 base_name 压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存至当前目录,否则保存指定路径 data ...

  7. python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块

    正则表达式   语法:             mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...

  8. (汇总)os模块以及shutil模块对文件的操作

    ''' # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux ...

  9. Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块

    StringIO StringIO操作 BytesIO BytesIO操作 file-like对象 路径操作 路径操作模块 3.4版本之前:os.path模块 3.4版本开始 建议使用pathlib模 ...

随机推荐

  1. 学习Oracle的一些收获

    前言: 在看尚硅谷的Oracle视频时,总结的一些自己之前不熟的,或者完全不了解的知识点,只适用于本人,本人有一定的SQL基础,所以一些我比较熟悉的知识点不会列出来. Oracle中SQL使用技巧: ...

  2. python---CMDB配置管理数据库

    前戏:项目目的 是一个运维自动化管理项目: 为了减少人工干预,降低人员成本 ---资产管理 --操作管理 避免人员直接操作服务器,使用后台去统一操作 一:实现方式 (一)Agent基于shell命令实 ...

  3. python---基础知识回顾(十)进程和线程(协程gevent:线程在I/O请求上的优化)

    优点:使用gevent协程,可以更好的利用线程资源.(基于线程实现) 需求:使用一个线程,去请求多个网站的资源(注意,请求上会有延时)<实际上是去请求了大量的网站信息,我们使用了多线程,只不过每 ...

  4. 2017 清北济南考前刷题Day 6 afternoon

    期望得分:100+100+30=230 实际得分: 正解: 枚举最高的位,这一位m是1但实际用了0 然后剩余的低位肯定是 正数就用1,负数用0 考场思路:数位DP #include<cstdio ...

  5. [洛谷P3643] [APIO2016]划艇

    洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...

  6. Linux启动的流程

    2017年1月10日, 星期二 Linux启动的流程   null

  7. JavaScript 延时与定时

    一.定时(setInterval) var i = 0; function hello(){ console.log(i++); } setInterval(hello,1000); // 每一秒执行 ...

  8. SharePoint 项目的死法(三)

    拙劣的供应商(团队) 坦率来说, 说这个原因需要一点勇气, 但在我从业的经历中, 充斥这大量的这样的案例, 没有什么实施经验的团队, 对产品几乎没什么了解的供应商, 三脚猫的开发人员,之前只会做做微软 ...

  9. 谈谈动态地加载Jquery库文件的方法

    有时候,我们可能不会在网页中<script src="jquery.min.js" 来加载 Jquery 库,可能在用户点击某个按钮后,才去加载 Jquery 库. 好处不用 ...

  10. celery简介

    目录 Celery简介 Celery架构 中间件选择 Celery序列化 简单项目 Celery简介 celery userguide 知乎大神解释celery Celery(芹菜)是基于Python ...