Python标准库shutil用法实例详解


Posted in Python onAugust 13, 2018

本文实例讲述了Python标准库shutil用法。分享给大家供大家参考,具体如下:

shutil模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能。

文件夹与文件操作

copyfileobj(fsrc, fdst, length=16*1024): 将fsrc文件内容复制至fdst文件,length为fsrc每次读取的长度,用做缓冲区大小

  • fsrc: 源文件
  • fdst: 复制至fdst文件
  • length: 缓冲区大小,即fsrc每次读取的长度
import shutil
f1 = open("file.txt","r")
f2 = open("file_copy.txt","a+")
shutil.copyfileobj(f1,f2,length=1024)

copyfile(src, dst): 将src文件内容复制至dst文件

  • src: 源文件路径
  • dst: 复制至dst文件,若dst文件不存在,将会生成一个dst文件;若存在将会被覆盖
  • follow_symlinks:设置为True时,若src为软连接,则当成文件复制;如果设置为False,复制软连接。默认为True。Python3新增参数
import shutil
shutil.copyfile("file.txt","file_copy.txt")

copymode(src, dst): 将src文件权限复制至dst文件。文件内容,所有者和组不受影响

  • src: 源文件路径
  • dst: 将权限复制至dst文件,dst路径必须是真实的路径,并且文件必须存在,否则将会报文件找不到错误
  • follow_symlinks:设置为False时,src, dst皆为软连接,可以复制软连接权限,如果设置为True,则当成普通文件复制权限。默认为True。Python3新增参数
import shutil
shutil.copymode("file.txt","file_copy.txt")

copystat(src, dst): 将权限,上次访问时间,上次修改时间以及src的标志复制到dst。文件内容,所有者和组不受影响

  • src: 源文件路径
  • dst: 将权限复制至dst文件,dst路径必须是真实的路径,并且文件必须存在,否则将会报文件找不到错误
  • follow_symlinks:设置为False时,src, dst皆为软连接,可以复制软连接权限、上次访问时间,上次修改时间以及src的标志,如果设置为True,则当成普通文件复制权限。默认为True。Python3新增参数
import shutil
shutil.copystat("file.txt","file_copy.txt")

copy(src, dst): 将文件src复制至dst。dst可以是个目录,会在该目录下创建与src同名的文件,若该目录下存在同名文件,将会报错提示已经存在同名文件。权限会被一并复制。本质是先后调用了copyfile与copymode而已

  • src:源文件路径
  • dst:复制至dst文件夹或文件
  • follow_symlinks:设置为False时,src, dst皆为软连接,可以复制软连接权限,如果设置为True,则当成普通文件复制权限。默认为True。Python3新增参数
improt shutil,os
shutil.copy("file.txt","file_copy.txt")
# 或者
shutil.copy("file.txt",os.path.join(os.getcwd(),"copy"))

copy2(src, dst): 将文件src复制至dst。dst可以是个目录,会在该目录下创建与src同名的文件,若该目录下存在同名文件,将会报错提示已经存在同名文件。权限、上次访问时间、上次修改时间和src的标志会一并复制至dst。本质是先后调用了copyfile与copystat方法而已

  • src:源文件路径
  • dst:复制至dst文件夹或文件
  • follow_symlinks:设置为False时,src, dst皆为软连接,可以复制软连接权限、上次访问时间,上次修改时间以及src的标志,如果设置为True,则当成普通文件复制权限。默认为True。Python3新增参数
improt shutil,os
shutil.copy2("file.txt","file_copy.txt")
# 或者
shutil.copy2("file.txt",os.path.join(os.getcwd(),"copy"))

ignore_patterns(*patterns): 忽略模式,用于配合copytree()方法,传递文件将会被忽略,不会被拷贝

  • patterns:文件名称,元组

copytree(src, dst, symlinks=False, ignore=None): 拷贝文档树,将src文件夹里的所有内容拷贝至dst文件夹

  • src:源文件夹
  • dst:复制至dst文件夹,该文件夹会自动创建,需保证此文件夹不存在,否则将报错
  • symlinks:是否复制软连接,True复制软连接,False不复制,软连接会被当成文件复制过来,默认False
  • ignore:忽略模式,可传入ignore_patterns()
  • copy_function:拷贝文件的方式,可以传入一个可执行的处理函数,默认为copy2,Python3新增参数
  • ignore_dangling_symlinks:sysmlinks设置为False时,拷贝指向文件已删除的软连接时,将会报错,如果想消除这个异常,可以设置此值为True。默认为False,Python3新增参数
import shutil,os
folder1 = os.path.join(os.getcwd(),"aaa")
# bbb与ccc文件夹都可以不存在,会自动创建
folder2 = os.path.join(os.getcwd(),"bbb","ccc")
# 将"abc.txt","bcd.txt"忽略,不复制
shutil.copytree(folder1,folder2,ignore=shutil.ignore_patterns("abc.txt","bcd.txt")

rmtree(path, ignore_errors=False, onerror=None): 移除文档树,将文件夹目录删除

  • ignore_errors:是否忽略错误,默认False
  • onerror:定义错误处理函数,需传递一个可执行的处理函数,该处理函数接收三个参数:函数、路径和excinfo
import shutil,os
folder1 = os.path.join(os.getcwd(),"aaa")
shutil.rmtree(folder1)

move(src, dst): 将src移动至dst目录下。若dst目录不存在,则效果等同于src改名为dst。若dst目录存在,将会把src文件夹的所有内容移动至该目录下面

  • src:源文件夹或文件
  • dst:移动至dst文件夹,或将文件改名为dst文件。如果src为文件夹,而dst为文件将会报错
  • copy_function:拷贝文件的方式,可以传入一个可执行的处理函数。默认为copy2,Python3新增参数
import shutil,os
# 示例一,将src文件夹移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作
folder1 = os.path.join(os.getcwd(),"aaa")
folder2 = os.path.join(os.getcwd(),"bbb")
shutil.move(folder1, folder2)
# 示例二,将src文件移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作
file1 = os.path.join(os.getcwd(),"aaa.txt")
folder2 = os.path.join(os.getcwd(),"bbb")
shutil.move(file1, folder2)
# 示例三,将src文件重命名为dst文件(dst文件存在,将会覆盖)
file1 = os.path.join(os.getcwd(),"aaa.txt")
file2 = os.path.join(os.getcwd(),"bbb.txt")
shutil.move(file1, file2)

disk_usage(path): 获取当前目录所在硬盘使用情况。Python3新增方法

  • path:文件夹或文件路径。windows中必须是文件夹路径,在linux中可以是文件路径和文件夹路径
import shutil.os
path = os.path.join(os.getcwd(),"aaa")
info = shutil.disk_usage(path)
print(info)   # usage(total=95089164288, used=7953104896, free=87136059392)

chown(path, user=None, group=None): 修改路径指向的文件或文件夹的所有者或分组。Python3新增方法

  • path:路径
  • user:所有者,传递user的值必须是真实的,否则将报错no such user
  • group:分组,传递group的值必须是真实的,否则将报错no such group
import shutil,os
path = os.path.join(os.getcwd(),"file.txt")
shutil.chown(path,user="root",group="root")

which(cmd, mode=os.F_OK | os.X_OK, path=None): 获取给定的cmd命令的可执行文件的路径。Python3新增方法

import shutil
info = shutil.which("python3")
print(info)   # /usr/bin/python3

归档操作

shutil还提供了创建和读取压缩和存档文件的高级使用程序。内部实现主要依靠的是zipfile和tarfile模块

make_archive(base_name, format, root_dir, …): 生成压缩文件

  • base_name:压缩文件的文件名,不允许有扩展名,因为会根据压缩格式生成相应的扩展名
  • format:压缩格式
  • root_dir:将制定文件夹进行压缩
import shutil,os
base_name = os.path.join(os.getcwd(),"aaa")
format = "zip"
root_dir = os.path.join(os.getcwd(),"aaa")
# 将会root_dir文件夹下的内容进行压缩,生成一个aaa.zip文件
shutil.make_archive(base_name, format, root_dir)

get_archive_formats(): 获取支持的压缩文件格式。目前支持的有:tar、zip、gztar、bztar。在Python3还多支持一种格式xztar

unpack_archive(filename, extract_dir=None, format=None): 解压操作。Python3新增方法

  • filename:文件路径
  • extract_dir:解压至的文件夹路径。文件夹可以不存在,会自动生成
  • format:解压格式,默认为None,会根据扩展名自动选择解压格式
import shutil,os
zip_path = os.path.join(os.getcwd(),"aaa.zip")
extract_dir = os.path.join(os.getcwd(),"aaa")
shutil.unpack_archive(zip_path, extract_dir)

get_unpack_formats(): 获取支持的解压文件格式。目前支持的有:tar、zip、gztar、bztar和xztar。Python3新增方法

关于shutil的更多操作:https://docs.python.org/3/library/shutil.html

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
python实现移位加密和解密
Mar 22 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
python 爬虫请求模块requests详解
Dec 04 Python
Python入门之使用pandas分析excel数据
May 12 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 #Python
python之super的使用小结
Aug 13 #Python
Selenium控制浏览器常见操作示例
Aug 13 #Python
详解python3中的真值测试
Aug 13 #Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 #Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 #Python
python删除字符串中指定字符的方法
Aug 13 #Python
You might like
Javascript中的相等与不等运算
2010/04/25 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
python复制与引用用法分析
2015/04/08 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
人事任命书格式
2014/06/05 职场文书
学校四群教育实施方案
2014/06/12 职场文书
音乐教师求职信
2014/06/28 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
2014年财政局工作总结
2014/12/09 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
新郎接新娘保证书
2015/05/08 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python