shutil 模块简单使用

shutil.copyfileobj(fsrc, fdst,[ length]):拷贝文件句柄,将类文件对象fsrc的内容复制到类文件对象fdst。如果给定整数长度,则为缓冲区大小。如果长度是负值意味着复制数据时不需要以块的形式对源数据进行循环,默认情况下,数据是块读取的,以避免不受控制的内存消耗。注意,如果fsrc对象的当前文件位置不是0,那么只复制从当前文件位置到文件末尾的内容。

如下,拷贝文件操作:

import shutil
with open("test.txt",mode="r",encoding="utf-8") as f1, \
open("abc",mode="a",encoding="utf-8") as f2:
shutil.copyfileobj(f1,f2) # 拷贝文件句柄

拷贝后的数据如下图所示:

shutil.copyfile(src, dst, *, follow_symlinks=True)

src:源文件。

dst:目标文件

*:模式不用管编码方式默认是utf-8

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

如果follow_symlinks为false, src是一个符号链接(快捷方式),那么将创建一个新的符号链接(快捷方式),而不是复制src指向的文件。

文件拷贝,操作如下:

import shutil
shutil.copyfile("test.txt","abc")

拷贝后如下图所示:

shutil.copymode(src, dst, *, follow_symlinks=True):将src权限复制到dst。文件内容、所有者和组不受影响。如果follow_symlinks为假,并且src和dst都是符号链接,copymode()将尝试修改dst本身的模式(而不是它指向的文件)。此功能并非在每个平台上都可用;有关更多信息,请参见copystat()。如果copymode()不能修改本地平台上的符号链接,并且被要求这样做,那么它将什么也不做并返回。

shutil.copystat(src, dst, *, follow_symlinks=True):将src文件状态拷贝到dst,dst文件必须存在。如上次访问时间、上次修改时间和标志从src复制到dst。在Linux上,copystat()也尽可能地复制“扩展属性”。文件内容、所有者和组不受影响。

如果follow_symlinks为假,并且src和dst都引用符号链接,copystat()将对符号链接本身进行操作,而不是对符号链接引用的文件进行操作,从src符号链接读取信息,并将信息写入dst符号链接。

shutil.copy(src, dst, *, follow_symlinks=True):将文件src复制到文件或目录dst。如果dst指定一个目录,该文件将使用来自src的文件名复制到dst文件夹中,如果dst是文件名将src文件内容复制一份到dst文件中。

拷贝文件test.txt内容到abc中,拷贝test.txt到一个目录下。

import shutil
shutil.copy("test.txt","abc")
shutil.copy("test.txt",r"I:\python_work\test")

拷贝后的内容如下:

shutil.copy2(src, dst, *, follow_symlinks=True):功能与copy相同,但可以试图保存目标文件的原数据,(实验没成功,拷贝后会覆盖原有数据)。

shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False):递归复制位于src的整个目录树,返回目标目录。由dst命名的目标目录必须不存在,它将被当做父目录。

import shutil
shutil.copytree("a","z")

如下图示拷贝后的数据:

shutil.rmtree(pathignore_errors=Falseonerror=None):递归的删除目录,一定要注意在删除时,无论目录是空目录还是有文件的目录,都会不提示的删除,而且删除的数据不经过回收站,无法恢复,所以慎用。

import shutil
shutil.rmtree("z")

shutil.move(srcdstcopy_function=copy2):相当于剪切,如果在同目录下就相当于重命名的操作。

如下面相当于重命名操作,剪切也类似就不演示了。

import shutil
shutil.move("abc","abc.txt")

shutil.disk_usage(path):以命名元组的形式返回给定路径的磁盘使用情况统计信息,属性为total、used和free,即总空间、已用空间和可用空间量(以字节为单位)。在Windows上,路径必须是目录;在UNIX上,路径可以是文件或目录。

import shutil
ret = shutil.disk_usage(r"I:\python_work")
print(ret) # 打印字节形式 # 打印GB形式的
print("total:",int(ret[0] / (1024 ** 3)),"GB")
print("used:",int(ret[1] / (1024 ** 3)),"GB")
print("free",int(ret[2] / (1024 ** 3)),"GB")

内容如下:

shutil.chown(path, user=None, group=None):更改文件用户的所有者和用户组。

shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None):返回可以行文件的路径,如下所示:

import shutil
print(shutil.which("cmd")) # 打印内容如下
C:\Windows\system32\cmd.EXE

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。

base_name: 要创建的文件名,如果有路径则将文件保存到路径下,如果没有路径则保存到当前目录下,件名是没有扩展名的。

format:压缩包种类,“zip”, “tar”, “bztar”,“gztar”

root_dir:要被打包的文件路径

base_dir:被打包文件的路径,优先级高于root_dir

owner:用户,默认当前用户

group:组,默认当前组

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

如下:

import shutil
shutil.make_archive(base_name=r"I:\test\python_work_zip",
format="zip", root_dir=r"I:\test")

打包后的内容如下:

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的

zipfile模块

压缩文件:

import zipfile
z = zipfile.ZipFile('test.zip', 'w') # 压缩后的文件名
z.write('test') # 要被压缩的文件
z.close() # 关闭zip对象

压缩后的内容如下:

解压文件:

import zipfile
z = zipfile.ZipFile('test_1.zip', 'r') # 要被解压的文件
z.extractall(path=r'I:\test') # 将提取后的文件保存到路径中
z.close()

解压后的文件如下:

tarfile压缩:

import tarfile
t=tarfile.open('test.tar','w') # 压缩后的名字
t.add('test',arcname='a.bak') # 要压缩的文件和压缩后将被压缩文件改名为a.bak
t.close()

压缩后的文件内容如下:

解压:

import tarfile
t=tarfile.open('test.tar','r') # 要被解压的包
t.extractall(path=r"I:\test") # 解压后保存的路径
t.close()

解压后内容如下:


下一篇:re正则表达式:https://www.cnblogs.com/caesar-id/p/10467396.html

python模块shutil的更多相关文章

  1. python模块------shutil

    说明 shutil -- High-level file operations 是一种高层次的文件操作工具 类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好. copy() ...

  2. python(6)-shutil模块

    高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中: #源码 def copyfileobj(fsr ...

  3. Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)

    目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操 ...

  4. python模块之os sys shutil

    os模块 os模块是与操作系统交互的一个接口 #当前执行这个python文件的工作目录相关的工作路径 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir( ...

  5. python基础--shutil模块

    shutil模块提供了大量的文件的高级操作. 特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 注意 即便是更高级别的文件复制函数(shutil.cop ...

  6. Python模块:shutil、序列化(json&pickle&shelve)、xml

    shutil模块: 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fscr,fdst [, length])   # 将文件内容拷贝到另一个文件中 import shu ...

  7. python day 9: xlm模块,configparser模块,shutil模块,subprocess模块,logging模块,迭代器与生成器,反射

    目录 python day 9 1. xml模块 1.1 初识xml 1.2 遍历xml文档的指定节点 1.3 通过python手工创建xml文档 1.4 创建节点的两种方式 1.5 总结 2. co ...

  8. python笔记7 logging模块 hashlib模块 异常处理 datetime模块 shutil模块 xml模块(了解)

    logging模块 日志就是记录一些信息,方便查询或者辅助开发 记录文件,显示屏幕 低配日志, 只能写入文件或者屏幕输出 屏幕输出 import logging logging.debug('调试模式 ...

  9. Python 文件操作模块 shutil 详解

    1.导入模块 shutil import shutil 2.shutil方法 2.1 shutil.copy(src,dst) //将 src 复制到 dst 保留文件权限    例:将Alan复制到 ...

随机推荐

  1. 主机名变成bogon?连不上mysql?你需要看下这篇文章

    通过navicat for mysql操作部署在虚拟机centos里面的mysql数据库时候总是出现类似于下面的提示信息: Can't connct to MySQL server on '*.*.* ...

  2. slice全解析

    slice全解析 昨天组内小伙伴做分享,给出了这么一段代码: package main import ( "fmt" ) func fun1(x int) { x = x + 1 ...

  3. Ocelot统一权限验证

    Ocelot作为网关,可以用来作统一验证,接上一篇博客,我们继续 前一篇,我们创建了OcelotGateway网关项目,DemoAAPI项目,DemoBAPI项目,为了验证用户并分发Token,现在还 ...

  4. redis 系列25 哨兵Sentinel (高可用演示 下)

    一. Sentinel 高可用环境准备 1.1 Sentinel 集群环境 环境 说明 操作系统版本 CentOS  7.4.1708  IP地址 172.168.18.200 网关Gateway 1 ...

  5. Eclipse导入别人的项目报错:Unable to load annotation processor factory 'xxxxx.jar' for project

    使用eclipse导入别人的项目时候,报错Unable to load annotation processor factory 'xxxxx.jar' for project. 解决方案 1.项目右 ...

  6. Unity资源打包学习笔记(一)、详解AssetBundle的流程

    转载请标明出处:http://www.cnblogs.com/zblade/ 本文参照unity官网上对于assetBundle的一系列讲解,主要针对assetbundle的知识点做一个梳理笔记,也为 ...

  7. 消息队列、socket(UDP)实现简易聊天系统

    前言: 最近在学进程间通信,所以做了一个小项目练习一下.主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作数据库不熟悉的可以参照我的这篇博客:https://www.c ...

  8. springboot+mybatis+dubbo+aop日志第三篇

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等. Spring AOP模块提供截取拦截应用程序的拦截器,例如,当执行方法时,可以在执行方法之前或之后添加 ...

  9. Kafka基础入门

    1. Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作 ...

  10. Scala(二) —— 函数

    try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...