下面讲解shutil模块的相关操作:

  1.shutil.copyfileobj(fsrc, fdst, length=16*1024) 将fsrc文件内容拷贝到fdst文件中,length是指一次拷贝多少个字节

源码:
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)

  不难发现,copyfileobj方法中length参数是指一次拷贝多少个字符(以字符形式读取文件,如果以字节的形式读取,则length值字节数),内部的实现通过一个while死循环来遍历fsrc文件的length长度字符,并写入fdst文件中,如果不写则默认length = 16 * 1024

# 1.将文件内容拷贝到另一个文件中 shutil.copyfileobj(fsrc, fdst, length=16*1024),可以指定一次拷贝多少内容,本例不写,则默认读取16 * 1024个字节
ret = shutil.copyfileobj(open('file_01.txt'),open('file_02.txt','w'))
print('将文件内容拷贝到另一个文件中:',ret)

  2.shutil.copyfile(src, dst) 拷贝文件,dst目标文件无需存在

#2.拷贝文件 shutil.copyfile(src, dst) dst目标文件无需存在
ret = shutil.copyfile('file_01.txt','file_03.txt')
print('拷贝文件:',ret)

  3.shutil.copymode(src,dst)仅拷贝权限,内容、组、用户均不变,dst目标文件必须存在

# 3.仅拷贝权限,内容、组、用户均不变 dst目标文件必须存在
ret = shutil.copymode('file_01.txt','file_04.txt')
print('仅拷贝权限:',ret)

  4.shutil.copystat(src,dst)仅拷贝状态的信息,包括mode bits、atime、mtime、flags  dst目标文件必须存在

# 4.仅拷贝文件状态 包括mode bits、atime、mtime、flags  dst目标文件必须存在
ret = shutil.copystat('file_01.txt','file_05.txt')
print('仅拷贝文件状态:',ret)

  5.shutil.copy(src,dst)拷贝文件和权限  dst目标文件无需存在

# 5.shutil.copy(src,dst) 拷贝文件和权限 dst目标文件无需存在
ret = shutil.copy('file_01.txt','file_06.txt')
print('拷贝文件和权限:',ret)

  6.shutil.copy2(src,dst)拷贝文件和状态信息 dst目标文件无需存在

# 6.shutil.copy2(src,dst) 拷贝文件和状态 dst目标文件无需存在
ret= shutil.copy2('file_01.txt','file_07.txt')
print('拷贝文件和状态:',ret)

  7.shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹,ignore参数可以设置忽略文件  dst目标文件不能存在,否则报错

    shutil.ignore_patterns('__init__.py','views.py')

# 7.shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹
ret = shutil.copytree('file01','file02',ignore=shutil.ignore_patterns('__init__.py','views.py'))
print('递归拷贝文件目录:',ret)

  8.shutil.rmtree(src) 递归删除文件 src源文件必须存在,否则报错

# 8.shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的删除文件
ret = shutil.rmtree('file02')
print('递归删除文件:',ret)

  9.shutil.move(src,dst)递归移动文件,src源文件必须存在,否侧报错

# 9.shutil.move(src,dst) 递归移动文件,类似mv命令
ret = shutil.move('file01','file02')
print('递归移动文件:',ret)

重点学习

  项目的目录结构如下:

  1.压缩文件
  make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None)
  创建压缩包并返回文件路径,例如zip、tar
  base_name 压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存到当前目录,否则保存到指定路径
  format 压缩包的种类 'zip'、'tar'、'bztar'、'gztar'
  root_dir 要压缩的文件夹路径(默认当前目录)
  logger 用于记录日志,通常是logging.Logger对象

# 压缩fil02文件夹,由于shutil_exercise.py所在目录是shutil下,如果不指定root_dir,怎会将shutil目录下的所有文件都压缩到file02.zip包中
# 将/file02下文件压缩放置到当前目录下
ret = shutil.make_archive('file02','zip',root_dir='./file02')
print('压缩文件:',ret)

  shutil对压缩包的处理是调用ZipFile和TarFile两个模块进行的,详细讲解:

  zipfile的压缩/解压

# 压缩
z = zipfile.ZipFile('file01.zip','w')
z.write('file_01.txt')
z.write('file_02.txt')
z.write('file02')
z.close() # 解压
# 将file01.zip压缩包的内容解压到当前目录的file01目录下
z = zipfile.ZipFile('file01.zip','r')
z.extractall(path='./file01')
z.close()

  注意:zipfile不能压缩目录,只能压缩文件,也就意味着压缩后的文件中file02只是一个空目录,目录下的文件不会被压缩

  tarfile的压缩/解压

import tarfile
# 压缩
t = tarfile.open('tmp/file01.tar','w')
t.add('file_01.txt',arcname='file_01.bak')
t.add('file01')
t.close() # 解压
t = tarfile.TarFile('tmp/file01.tar','r')
t.extractall('tmp/tar')
t.close()

  注意:tarfile可以压缩目录

    

20180209-shutil模块的更多相关文章

  1. python的shutil模块

    shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作 1.复制文件 def copy(src, dst): """Co ...

  2. shutil模块

    shutil模块 提供了大量的文件的高级操作,特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作 常用方法 shutil.copyfile(src, dst) 复制文件内容(不包含元数据)从 ...

  3. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  4. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  5. Python中os和shutil模块实用方法集锦

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  6. Python shutil模块

    shutil模块下 copy(复制).rm(删除).move(移动) 常用方法举例. copyfileobj(fsrc, fdst[, length])copyfile(src, dst, *, fo ...

  7. Python第二十天 shutil 模块 zipfile tarfile 模块

    Python第二十天  shutil 模块  zipfile   tarfile 模块 os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...

  8. 小白的Python之路 day5 shutil模块

    shutil模块 一.主要用途 高级的文件.文件夹.压缩包 等处理模块 二.常用方法详解 1.shutil.copyfileobj(fsrc, fdst) 功能:把一个文件的内容拷贝到另外一个文件中, ...

  9. Day5模块-shutil模块

    参考博客:http://www.cnblogs.com/wupeiqi/articles/4963027.html shutil模块是高级的文件.文件夹.压缩处理的模块.比如文件的copy.压缩等. ...

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

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

随机推荐

  1. python-使用list和tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  2. mysql数据同步到Elasticsearch

    1.版本介绍 Elasticsearch: https://www.elastic.co/products/elasticsearch 版本:2.4.0   Logstash: https://www ...

  3. TCP: time wait bucket table overflow

    .TCP: time wait bucket table overflow tcp的连接数超出了服务器设置的连接数 1 2 3 4 5 6 [root@test log]# netstat -antp ...

  4. navicat连接客户端报错

    怎么感觉oracle和sql server是一个货色.装个服务得装半天,还是mysql好,一下子就好了!下面有一个在centos7上面安装oracle11g的详细步骤,感觉找不到比这个更详细的了吧! ...

  5. 【leetcode】778. Swim in Rising Water

    题目如下: 解题思路:本题题干中提到了一个非常重要的前提:"You can swim infinite distance in zero time",同时也给了一个干扰条件,那就是 ...

  6. php array()函数 语法

    php array()函数 语法 作用:生成一个数组 语法:索引数组:array(value1,value2,value3,etc.);关联数组:array(key=>value,key=> ...

  7. [CF1167D]Bicolored RBS题解

    模拟两个颜色的扩号层数,贪心,如果是左括号,哪边的层数浅就放那边:如果是右括号,哪边的层数深就放那边. 至于层数的维护,两个int就做掉了 放个代码: #include <cstdio> ...

  8. c#image与byte数组的转换

    // image to byte[] Image photo = new Bitmap(selectPictureFile); System.IO.MemoryStream ms = new Syst ...

  9. 20180715-Java日期时间

    import java.util.Date;public class DateDemo{ public static void main(String[] args){ //初始化Date对象 Dat ...

  10. gcc -o hello hello.c 执行过程

    GCC编译器驱动程序读取源程序文件hello.c,并将它翻译成一个可执行目标文件hello.这个翻译的过程可分为四个阶段. 1.预处理阶段 预处理器(cpp)根据以字符#开头的命令,修改原始的c程序. ...