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程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
在Python的列表中利用remove()方法删除元素的教程
May 21 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
使用Scrapy爬取动态数据
Oct 21 Python
Python中捕获键盘的方式详解
Mar 28 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
iPython pylab模式启动方式
Apr 24 Python
Python while true实现爬虫定时任务
Jun 08 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 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
php 购物车的例子
2009/05/04 PHP
php共享内存段示例分享
2014/01/20 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
php短信接口代码
2016/05/13 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
js 作用域和变量详解
2017/02/16 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
安全责任书范文
2014/03/12 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
公司经理任命书
2014/06/05 职场文书
部队2014年终工作总结
2014/11/27 职场文书
考研英语辞职信
2015/05/13 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python