20180209-shutil模块

下面讲解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:breakfdst.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可以压缩目录

    

转载于:https://www.cnblogs.com/it-q/p/8435676.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入一个数3256,将他从小到大输出,就是2356

这是知乎上面的一个题目,挺有意思,面试的时候应该是作为基础题,很多人不屑于看这样的题目,但是到自己些的时候,就会有很多问题。题目要求输入一个数3256,将他从小到大输出,就是2356分析输入的是…

深度学习之负荷分解——LSTM(一对多)任务场景

1.任务场景 以家庭为例,假设该家庭有m种电器和总负荷的曲线,其中,总负荷为,各个电器的负荷有(m是电器个数,n是n个时刻)。我们需要通过对总负荷曲线进行分解,识别出该负荷有几种电器同时运行实现…

这是我见过最秀的代码

这么秀的代码,你能写出来吗?技术主管来了都不好使,main函数里第一个函数必须是这个。佛祖保佑版:void godBless(void) { // _ooOoo_ // o8888888o // …

Cortex M3存储器映射

CortexM3存储器系统 宗旨:技术的学习是有限的,分享的精神是无限的。 CM3 只有一个单一固定的存储器映射。这一点极大地方便了软件在各种 CM3 单片机间的移植。 存储空间的一些位置用于调试组件等私有外设,这个地址段被称为“私有外设区”。私…

这些年,NLP常见的预训练模型剖析

“预训练-微调”(pre-training and fine-tune) 已经成为解决NLP任务的一种新的范式。基于预训练语言模型的词表示由于可以建模上下文信息,进而解决传统静态词向量不能建模“一词多义”语言现象的问题。传统的词向量有one-hot(杜热…

Linux Ftrace 使用

Ftrace相关的文章如何利用ftrace精确跟踪特定进程调度信息1、Ftrace 是什么东西?Ftrace是一个直接内置在Linux内核中的跟踪工具。许多发行版在最近的发行版中已经启用了各种各样的Ftrace配置。Ftrace给Linux带来的好处之一是能够看到内核中发生了什么。因此&#xf…

Cortex M3寄存器组

寄存器组 宗旨:技术的学习是有限的,分享的精神是无限的。 1、通用目的寄存器R0~R7 R0-R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。 2、通用目的寄存器 R8-R12 R8-R12 也被称为高组寄…

深度学习-超参数调优

在机器学习中有很多调优的方式机器学习——超参数调优,深度学习中也存在同样的方式,接下来,介绍一下深度学习框架里边的自动调参模块。 1. 基于Tensorflow的Keras tuner 官方教程如下:Introduction to the Keras Tuner | Tens…

Paddle——常见的评估指标

在模型评估过程中,分类、回归、排序问题往往使用不同的指标进行评估。分类问题通常用准确率、召回率、精准率、F1值等指标进行评估;回归问题使用MSE、RMSE、R^2、MAPE等; 1 分类评估原理 1.1 准确率的局限性 我们经常接触的评价指标就是准…

大江大河,随笔观后感

我是「大江大河」的铁粉,非常喜欢这部剧,从这部剧里面能看到生活的一些影子。从这部剧里面也可以看到不同阶层的人们对待生活,对待理想,对待身边的朋友亲人的态度。—— 知乎热论「程开颜为什么输给了杨思申?」程开颜并…

Cortex M3内核架构

CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的。 1、ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU)。 完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权…

NLP——序列标注之命名实体识别

1.概述 序列标注包括自然语言处理中的分词,词性标注,命名实体识别,关键词抽取,词义角色标注等。解决方案是NN模型(神经网络模型)CRF 命名实体识别(Named Entity Recognition,简称N…

C语言验证6174数学问题

有意思的数学问题任意4位不完全一样的数字,能组合出的最大数字减去能组合出的最小数字,得到一个新的数字(3位数补0),重复以上操作,不超过7个循环,必然得到一个数:6174这个问题是之前发布的文章&…

Cortex-M3工作模式与异常

Cortex-M3工作模式与异常 宗旨:技术的学习是有限的,分享的精神是无限的。 一、工作模式 线程模式和手柄模式。 当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特…

自己动手实现一个malloc内存分配器 | 30图

对内存分配器透彻理解是编程高手的标志之一。如果你不能理解malloc之类内存分配器实现原理的话,那你可能写不出高性能程序,写不出高性能程序就很难参与核心项目,参与不了核心项目那么很难升职加薪,很难升级加薪就无法走向人生巅峰…

机器学习面试——分类算法SVM

1、什么是硬间隔和软间隔? 当训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机。 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器…

Cortex M3 NVIC与中断控制

Cortex M3 NVIC与中断控制 宗旨:技术的学习是有限的,分享的精神是无限的。 一、NVIC概览 ——嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外, NVIC 还包含了 MPU、 S…

VS 2005 或 VS 2008 在安装VSS 2005后,看不到源代码管理的解决办法

昨天有朋友在重新安装VS 2008后,再安装VSS 2005,安装好后在文件菜单中找不到“源代码管理”的菜单项,后来经朋友告知,是开发工具的默认选项设置问题。打开开发工具,“工具”--“选项”:(如图&am…

代码里-3gt;gt;1是-2但3gt;gt;1是1,-3/2却又是-1,为什么?

之前群里有个同学向大家提出了类似这样的问题。随后这位同学公布了答案:右移运算是向下取整,除法是向零取整。这句话对以上现象做了很好的总结,可是本质原因是什么呢?我一直以为-3>>1的结果是-1。所以打算思考一下这个问题。…